Как написать свой движок для сайта


Как создать движок для сайта

Вы здесь: Главная - PHP - PHP Основы - Как создать движок для сайта

У меня часто спрашивают: "Как создать свой собственный движок для сайта, например, как Joomla, DLE, WordPress и другие". Многие, конечно, спросят: "А зачем, ведь есть, например, Joomla?". На этот вопрос я уже отвечал в этой статье: joomla vs сайт с нуля. И если Вы приняли решение о создании своего движка для сайта, то читайте дальше.

Первым делом я Вас заранее предупреждаю, что даже создание простого движка требует очень много времени и сил, но зато через этот очень-очень интересный процесс Вы получите колоссальный опыт. Чтобы Вы лучше поняли, давайте распишу всё по пунктам:

  1. Сверстайте все страницы сайта. Здесь совсем необязательно рисовать какой-то дизайн - это можно сделать потом. Вы должны просто чётко нарисовать структуру внешнего вида: где будет лого, где меню, сколько колонок у Вас будет, что будет в подвале и так далее. Это всё можно будет потом поменять, но начальном этапе Вам просто нужно отлаживать движок, поэтому самый элементарный внешний вид всё равно потребуется.
  2. Создайте все таблицы для базы данных. В этом пункте необходимо понять, какие таблицы Вам потребуется и какие там будут поля. Например, таблица со статьями, с пользователями, с разделами сайта и так далее. Ничего страшного не будет, если Вы что-то забудете. Но этот пункт надо выполнить максимально хорошо, потому что после этого внутренняя структура движка станет намного понятнее.
  3. Теперь Вам необходимо создать набор классов (да, советую использовать объ

Публикация вашего веб-сайта - Изучите веб-разработку

После того, как вы закончите писать код и систематизировать файлы, из которых состоит ваш веб-сайт, вам нужно разместить все это в сети, чтобы люди могли его найти. В этой статье объясняется, как без особых усилий разместить простой пример кода в Интернете.

Какие есть варианты?

Публикация веб-сайта - сложная тема, потому что есть много способов сделать это. В этой статье не предпринимаются попытки описать все возможные методы. Вместо этого он объясняет преимущества и недостатки трех подходов, которые практичны для начинающих.Затем он проходит через один метод, который может сразу работать для многих читателей.

Получение хостинга и доменного имени

Чтобы иметь больший контроль над контентом и внешним видом веб-сайта, большинство людей предпочитают покупать веб-хостинг и доменное имя:

  • Веб-хостинг - это арендуемое файловое пространство на веб-сервере хостинговой компании. Вы размещаете файлы веб-сайта на веб-сервере. Веб-сервер предоставляет посетителям веб-сайта контент.
  • Доменное имя - это уникальный адрес, по которому люди находят ваш веб-сайт, например http: // www.mozilla.org или http://www.bbc.co.uk . Вы можете арендовать свое доменное имя на сколько угодно лет у регистратора доменов .

Многие профессиональные веб-сайты выходят в Интернет таким образом.

Кроме того, вам понадобится программа протокола передачи файлов (FTP) (подробнее см. Сколько это стоит: программное обеспечение) для фактической передачи файлов веб-сайта на сервер. Программы FTP сильно различаются, но обычно вы должны подключаться к своему веб-серверу, используя данные, предоставленные вашей хостинговой компанией (обычно имя пользователя, пароль, имя хоста).Затем программа покажет вам ваши локальные файлы и файлы веб-сервера в двух окнах и предоставит вам возможность передавать файлы туда и обратно.

Советы по поиску хостинга и доменов
  • MDN не продвигает определенные коммерческие хостинговые компании или регистраторов доменных имен. Чтобы найти хостинговые компании и регистраторов, просто выполните поиск по словам «веб-хостинг» и «доменные имена». Все регистраторы будут иметь возможность проверить, доступно ли желаемое доменное имя.
  • Ваш домашний или офисный интернет-провайдер может предоставить ограниченный хостинг для небольшого веб-сайта. Набор доступных функций будет ограничен, но он может быть идеальным для ваших первых экспериментов.
  • Также доступны бесплатные сервисы, такие как Neocities, Blogger и WordPress. Иногда вы получаете то, за что платите, но иногда этих ресурсов достаточно для ваших первоначальных экспериментов.
  • Многие компании предоставляют хостинг и домены.

С помощью онлайн-инструмента, такого как GitHub или Google App Engine

Некоторые инструменты позволяют опубликовать свой веб-сайт в Интернете:

  • GitHub - это сайт "социального программирования".Он позволяет загружать репозитории кода для хранения в системе контроля версий Git . После этого вы можете совместно работать над проектами кода, и по умолчанию система имеет открытый исходный код, а это означает, что любой человек в мире может найти ваш код GitHub, использовать его, учиться на нем и улучшать его. GitHub имеет очень полезную функцию под названием GitHub Pages, которая позволяет вам размещать код веб-сайта в реальном времени в Интернете.
  • Google App Engine - это мощная платформа, которая позволяет создавать и запускать приложения в инфраструктуре Google - независимо от того, нужно ли вам создать многоуровневое веб-приложение с нуля или разместить статический веб-сайт.Посмотрите, как вы размещаете свой веб-сайт на Google App Engine? Чтобы получить больше информации.

Эти опции обычно бесплатны, но вы можете перерасти ограниченный набор функций.

Использование веб-среды IDE, например CodePen

Существует ряд веб-приложений, которые имитируют среду разработки веб-сайтов, позволяя вводить HTML, CSS и JavaScript, а затем отображать результат этого кода как веб-сайт - все на одной вкладке браузера. Вообще говоря, эти инструменты относительно просты, хороши для обучения, хороши для совместного использования кода (например, если вы хотите поделиться методикой или попросить помощи по отладке у коллег в другом офисе) и бесплатны (для базовых функций).Они размещают вашу отображаемую страницу по уникальному веб-адресу. Однако функции ограничены, и эти приложения обычно не предоставляют место для размещения активов (например, изображений).

Попробуйте поиграть с некоторыми из этих примеров, чтобы определить, какой из них лучше всего подходит для вас:

Публикация через GitHub

Теперь давайте посмотрим, как легко опубликовать свой сайт через GitHub Pages.

  1. Прежде всего, зарегистрируйтесь на GitHub и подтвердите свой адрес электронной почты.
  2. Далее вам нужно создать репозиторий для хранения файлов.
  3. На этой странице в поле Имя репозитория введите имя пользователя .github.io, где имя пользователя - ваше имя пользователя. Например, наш друг Боб Смит ввел бы bobsmith.github.io .
    Установите флажок « Инициализировать этот репозиторий с помощью README» . Затем нажмите Создать репозиторий .
  4. Перетащите содержимое папки вашего веб-сайта в репозиторий. Затем нажмите Принять изменения .

    Примечание : Убедитесь, что ваша папка имеет индекс .html файл.

  5. Перейдите в браузере к имени пользователя .github.io, чтобы увидеть свой веб-сайт в Интернете. Например, для имени пользователя chrisdavidmills перейдите на chrisdavidmills .github.io.

    Примечание : запуск вашего веб-сайта может занять несколько минут. Если ваш веб-сайт не отображается сразу, подождите несколько минут. Попробуй еще раз.

Чтобы узнать больше, см. Справку по страницам GitHub.

Дополнительная литература

В этом модуле

.

Как писать собственные сайты для зарабатывания денег

Деньги, которые поступают независимо от того, работаете ли вы, спите, играете в гольф или отдыхаете на пляже.

Нет лучшего времени, чем сейчас, чтобы воспользоваться невероятной мощью и потенциалом Интернета.

Каждый день миллионы людей используют его для поиска информации, и многие заканчивают тем, что совершают покупку или переходят по рекламной ссылке.

Каждый раз, когда они это делают, кому-то платят.

Как писать свои собственные сайты для зарабатывания денег показывает вам, как стать этим человеком, шаг за шагом обучая вас создавать богатые контентом, приносящие деньги веб-сайты по темам, которые у вас уже есть увлечен…

веб-сайтов, которые позволят вам зарабатывать деньги в свободное время, занимаясь любимым делом, независимо от того, где вы находитесь и чем занимаетесь.

И, как только ваш первый веб-сайт будет запущен и начнет работать бесперебойно, его легко будет запустить

еще… и еще… и еще.

Как писать свои собственные сайты для зарабатывания денег научит вас всему, что вам нужно знать, чтобы ваш веб-сайт работал, работал, привлекал посетителей и зарабатывал деньги.

К тому времени, когда вы закончите, вы будете знать…

  • Самый быстрый, простой и дешевый способ создать профессиональный веб-сайт.
  • Как выбрать лучшую, наиболее удобную для посетителей тему для вашего сайта.
  • Как выбрать доменное имя для вашего сайта, которое привлечет больше всего посетителей.
  • Что должна делать каждая страница вашего сайта, чтобы максимизировать вашу прибыль.
  • Как написать копию, которую любят поисковые системы и что привлекает посетителей и удерживает их внимание.
  • Как написать и структурировать домашнюю страницу, которая заинтересует людей и создаст у них «покупательное настроение».”
  • Как привлечь и удержать «постоянных клиентов», сохраняя актуальность и интересность вашего сайта.
  • Как использовать внутренние ссылки сайта для значительного улучшения вашего рейтинга в поисковых системах.
  • Где найти лучших и самых высокооплачиваемых партнеров. (Эти парни ищут
  • таких же веб-сайтов, на которых можно разместить свою рекламу!)
  • Как заработать еще больше с Google AdSense и другими формами рекламы на сайте.
  • Семь действий, которые эксперты делают в течение 48 часов после публикации своего веб-сайта, чтобы быстрее привлечь на свой сайт больше посетителей.
  • Как отслеживать эффективность вашего сайта и как использовать эту информацию для его улучшения.
  • И многое, многое другое…

Эта программа не оставит вас в покое. От выбора темы до получения первой зарплаты - Как писать свои собственные сайты для зарабатывания денег проведет вас на каждом этапе пути.

И ты не будешь один! Вы будете получать постоянную поддержку от Ника Усборна и других успешных владельцев веб-сайтов, приносящих прибыль, в том числе тех, которые представлены в этот каталог, благодаря форуму только для членов и интерактивной обучающей программе - все это включено в программу.

Не теряйте ни минуты… начните сегодня же!

Как писать собственные сайты для зарабатывания денег : $ 497,00

Закажите сегодня!

Для получения дополнительной информации щелкните здесь…

.

Как написать собственный игровой движок на C ++

В последнее время я писал игровой движок на C ++. Я использую его, чтобы сделать небольшую мобильную игру под названием Hop Out . Вот клип, сделанный с моего iPhone 6. (Включить звук!)

Hop Out - это игра, в которую я хочу играть: ретро-аркадный геймплей с трехмерным мультяшным дизайном. Цель состоит в том, чтобы изменить цвет каждой панели, как в Q * Bert.

Hop Out все еще находится в разработке, но движок, на котором он работает, начинает становиться достаточно зрелым, поэтому я подумал, что могу поделиться здесь несколькими советами по разработке движка.

Зачем вам писать игровой движок? Есть много возможных причин:

  • Вы мастерица. Вы любите строить системы с нуля и видеть, как они оживают.
  • Вы хотите узнать больше о разработке игр. Я проработал 14 лет в игровой индустрии и все еще пытаюсь понять это. Я даже не был уверен, что смогу написать движок с нуля, так как это сильно отличается от повседневных обязанностей программиста в большой студии. Я хотел узнать.
  • Тебе нравится контроль. Приятно организовывать код именно так, как вы хотите, всегда зная, где что находится.
  • Вы чувствуете себя вдохновленными классическими игровыми движками, такими как AGI (1984), id Tech 1 (1993), Build (1995), и такими гигантами индустрии, как Unity и Unreal.
  • Вы считаете, что мы, игровая индустрия, должны попытаться демистифицировать процесс разработки движка. Не то чтобы мы овладели искусством создания игр. Отнюдь не! Чем больше мы исследуем этот процесс, тем больше у нас шансов улучшить его.

Игровые платформы 2017 года - мобильные, консольные и ПК - очень мощные и во многих отношениях очень похожи друг на друга. Разработка игрового движка - это не столько борьба со слабым и экзотическим оборудованием, как это было в прошлом. На мой взгляд, это больше о борьбе со сложностью , которую вы сами создаете, создавая . Создать монстра несложно! Вот почему советы в этом посте сосредоточены на том, чтобы все было управляемым. Я разбил его на три части:

  1. Использовать итерационный подход
  2. Подумайте дважды, прежде чем слишком много объединять
  3. Имейте в виду, что сериализация - важная тема

Этот совет применим к любому игровому движку.Я не собираюсь рассказывать вам, как написать шейдер, что такое октодерево или как добавить физику. Я полагаю, вы уже знаете о таких вещах, и это во многом зависит от типа игры, которую вы хотите создать. Вместо этого я сознательно выбрал моменты, которые, кажется, не получили широкого признания или обсуждения - это те моменты, которые я нахожу наиболее интересными при попытке демистифицировать предмет.

Итерационный подход

Мой первый совет - быстро запустить что-нибудь (что угодно!), А затем повторите.

Если возможно, начните с примера приложения, которое инициализирует устройство и рисует что-нибудь на экране. В моем случае я загрузил SDL, открыл Xcode-iOS / Test / TestiPhoneOS.xcodeproj , затем запустил образец testgles2 на моем iPhone.

Вуаля! У меня был прекрасный вращающийся куб, использующий OpenGL ES 2.0.

Следующим моим шагом было скачать 3D-модель Марио, которую кто-то сделал. Я написал быстрый и грязный загрузчик файлов OBJ - формат файла не такой уж и сложный - и взломал пример приложения для рендеринга Марио вместо куба.Я также интегрировал SDL_Image для загрузки текстур.

Затем я реализовал управление двумя джойстиками, чтобы перемещать Марио. (Вначале я подумывал создать шутер с двумя джойстиками. Но не с Марио.)

Затем я хотел изучить скелетную анимацию, поэтому я открыл Blender, смоделировал щупальце и оснастил его скелетом из двух костей, который покачивался взад и вперед.

На этом этапе я отказался от формата файла OBJ и написал сценарий Python для экспорта пользовательских файлов JSON из Blender.Эти файлы JSON описывают данные сетки, скелета и анимации со скелетом. Эти файлы я загрузил в игру с помощью библиотеки C ++ JSON.

Как только это сработало, я вернулся в Blender и сделал персонажа более сложным. (Это был первый сфальсифицированный трехмерный человек, которого я когда-либо создавал. Я очень им гордился.)

В течение следующих нескольких месяцев я предпринял следующие шаги:

  • Начал перенос векторных и матричных функций в мою собственную трехмерную математическую библиотеку.
  • Заменен файл .xcodeproj на проект CMake.
  • Движок работает как на Windows, так и на iOS, потому что мне нравится работать в Visual Studio.
  • Начал перенос кода в отдельные библиотеки «движок» и «игру». Со временем я разделил их на еще более детализированные библиотеки.
  • Написал отдельное приложение для преобразования моих файлов JSON в двоичные данные, которые игра может загружать напрямую.
  • В конце концов удалил все библиотеки SDL из сборки iOS.(Сборка Windows по-прежнему использует SDL.)

Дело в том, что Я не планировал архитектуру движка, прежде чем начал программировать . Это был осознанный выбор. Вместо этого я просто написал простейший код, реализующий следующую функцию, а затем посмотрел на код, чтобы увидеть, какая архитектура возникла естественным образом. Под «архитектурой движка» я подразумеваю набор модулей, составляющих движок игры, зависимости между этими модулями и API для взаимодействия с каждым модулем.

Это итеративный подход, поскольку он ориентирован на меньшие результаты. Это хорошо работает при написании игрового движка, потому что на каждом этапе у вас есть запущенная программа. Если что-то пойдет не так, когда вы вводите код в новый модуль, вы всегда можете сравнить свои изменения с кодом, который работал ранее. Очевидно, я предполагаю, что вы используете какой-то контроль версий.

Вы можете подумать, что такой подход тратится впустую, так как вы всегда пишете плохой код, который нужно исправить позже.Но большая часть очистки включает перемещение кода из одного файла .cpp, в другой, извлечение объявлений функций в файлы .h или столь же простые изменения. Решение , куда должно идти , является сложной частью, и это легче сделать, когда код уже существует.

Я бы сказал, что больше времени тратится впустую при противоположном подходе: слишком усердно пытаться придумать архитектуру, которая сделает все, что, как вы думаете, вам нужно, заранее. Две из моих любимых статей об опасностях чрезмерной инженерии - это «Порочный круг обобщения» Томаша Домбровски и «Не позволяйте архитектурным астронавтам пугать вас» Джоэла Спольски.

Я не говорю, что никогда не следует решать проблему на бумаге, прежде чем решать ее с помощью кода. Я также не говорю, что вам не следует заранее решать, какие функции вам нужны. Например, я с самого начала знал, что хочу, чтобы мой движок загружал все ресурсы в фоновом потоке. Я просто не пытался разработать или реализовать эту функцию, пока мой движок не загрузил сначала некоторые ресурсы.

Итеративный подход дал мне гораздо более элегантную архитектуру, чем я когда-либо мог представить, глядя на чистый лист бумаги.Сборка моего движка для iOS теперь представляет собой 100% исходный код, включая настраиваемую математическую библиотеку, шаблоны контейнеров, систему отражения / сериализации, структуру рендеринга, физику и звуковой микшер. У меня были причины для написания каждого из этих модулей, но вы, возможно, не сочтете необходимым писать все это самостоятельно. Существует множество отличных библиотек с открытым исходным кодом с разрешительной лицензией, которые вы можете найти подходящими для своего движка. GLM, Bullet Physics и заголовки STB - лишь несколько интересных примеров.

Подумайте дважды, прежде чем объединять слишком много вещей

Как программисты, мы стараемся избегать дублирования кода, и нам нравится, когда наш код следует единому стилю. Однако я считаю хорошо не позволять этим инстинктам преобладать над каждым решением.

Время от времени не поддавайтесь принципу СУХОСТИ

В качестве примера, мой движок содержит несколько классов шаблонов «умных указателей», по духу схожих с std :: shared_ptr . Каждый из них помогает предотвратить утечку памяти, служа оболочкой для необработанного указателя.

  • Владелец <> предназначен для динамически выделяемых объектов, имеющих одного владельца.
  • Ссылка <> использует подсчет ссылок, чтобы позволить объекту иметь несколько владельцев.
  • audio :: AppOwned <> используется кодом вне аудиомикшера. Он позволяет игровым системам владеть объектами, которые использует аудиомикшер, например голосом, который воспроизводится в данный момент.
  • audio :: AudioHandle <> использует внутреннюю систему подсчета ссылок для аудиомикшера.

Может показаться, что некоторые из этих классов дублируют функциональность других в нарушение принципа DRY (Don’t Repeat Yourself). В самом деле, на ранних этапах разработки я пытался как можно больше повторно использовать существующий класс Reference <> . Однако я обнаружил, что время жизни аудиообъекта регулируется особыми правилами: если звуковой голос завершил воспроизведение сэмпла, а игра не содержит указателя на этот голос, голос может быть немедленно поставлен в очередь для удаления.Если в игре есть указатель, то голосовой объект не следует удалять. И если игра содержит указатель, но владелец указателя уничтожается до того, как голос закончился, голос следует отменить. Вместо того, чтобы усложнять Reference <> , я решил, что будет более практичным вместо этого ввести отдельные классы шаблонов.

В 95% случаев можно использовать повторно существующий код. Но если вы начинаете чувствовать себя парализованным или обнаруживаете, что усложняете что-то, что когда-то было простым, спросите себя, должно ли что-то в кодовой базе действительно состоять из двух вещей.

Можно использовать разные соглашения о вызовах

В Java мне не нравится то, что она заставляет вас определять каждую функцию внутри класса. По-моему, это чушь. Это может сделать ваш код более последовательным, но также способствует чрезмерной инженерии и не подходит для итеративного подхода, который я описал ранее.

В моем движке C ++ некоторые функции принадлежат классам, а некоторые нет. Например, каждый враг в игре - это класс, и большая часть поведения врага реализуется внутри этого класса, как и следовало ожидать.С другой стороны, приведение сфер в моем движке выполняется путем вызова SphereCast () , функции в пространстве имен Physics . SphereCast () не принадлежит ни к какому классу - это просто часть модуля Physics . У меня есть система сборки, которая управляет зависимостями между модулями, что позволяет мне организовать код достаточно хорошо. Обертывание этой функции внутри произвольного класса не улучшит организацию кода каким-либо значимым образом.

Затем есть динамическая отправка, которая является формой полиморфизма.Нам часто требуется вызвать функцию для объекта, не зная точного типа этого объекта. Первым инстинктом программиста на C ++ является определение абстрактного базового класса с виртуальными функциями, а затем переопределение этих функций в производном классе. Это верно, но это только одна техника. Существуют и другие методы динамической диспетчеризации, которые не вводят столько дополнительного кода или приносят другие преимущества:

  • C ++ 11 представил std :: function , который является удобным способом хранения функций обратного вызова.Также можно написать свою собственную версию std :: function , в которую будет проще войти в отладчик.
  • Многие функции обратного вызова могут быть реализованы с помощью пары указателей: указателя функции и непрозрачного аргумента. Для этого просто требуется явное приведение внутри функции обратного вызова. Вы часто видите это в чистых библиотеках C.
  • Иногда базовый тип действительно известен во время компиляции, и вы можете связать вызов функции без каких-либо дополнительных затрат времени выполнения.Turf, библиотека, которую я использую в своем игровом движке, во многом полагается на эту технику. См., Например, turf :: Mutex . Это просто typedef над классом, зависящим от платформы.
  • Иногда самым простым подходом является создание и ведение таблицы необработанных указателей на функции самостоятельно. Я использовал этот подход в своем аудиомикшере и системе сериализации. Интерпретатор Python также активно использует эту технику, как упоминается ниже.
  • Вы даже можете хранить указатели функций в хеш-таблице, используя имена функций в качестве ключей.Я использую эту технику для отправки событий ввода, таких как события мультитач. Это часть стратегии, чтобы записывать игровые данные и воспроизводить их с помощью системы воспроизведения.

Динамическая отправка - большая тема. Я лишь поверхностно хочу показать, что есть много способов добиться этого. Чем больше вы пишете расширяемый низкоуровневый код, который часто встречается в игровом движке, тем больше вы обнаружите, что исследуете альтернативы. Если вы не привыкли к такому программированию, интерпретатор Python, написанный на C, станет отличным источником для обучения.Он реализует мощную объектную модель: каждый PyObject указывает на PyTypeObject , а каждый PyTypeObject содержит таблицу указателей функций для динамической диспетчеризации. Документ «Определение новых типов» - хорошая отправная точка, если вы хотите сразу приступить к делу.

Имейте в виду, что сериализация - важная тема

Сериализация - это процесс преобразования объектов среды выполнения в последовательность байтов и обратно. Другими словами, сохранение и загрузка данных.

Для многих, если не большинства игровых движков, игровой контент создается в различных редактируемых форматах, таких как .png , .json , .blend или проприетарных форматах, а затем в конечном итоге конвертируется в игровые форматы для конкретной платформы, которые движок может загружается быстро. Последнее приложение в этом конвейере часто называют «плита». Плита может быть интегрирована в другой инструмент или даже распределена по нескольким машинам. Обычно плита и ряд инструментов разрабатываются и обслуживаются в тандеме с самим игровым движком.

При настройке такого конвейера выбор формата файла на каждом этапе остается за вами. Вы можете определить некоторые собственные форматы файлов, и эти форматы могут развиваться по мере добавления функций движка. По мере их развития вам может потребоваться поддерживать совместимость определенных программ с ранее сохраненными файлами. Независимо от формата, вам в конечном итоге потребуется сериализовать его на C ++.

Существует бесчисленное множество способов реализовать сериализацию в C ++. Один довольно очевидный способ - добавить функции load и save к классам C ++, которые вы хотите сериализовать.Вы можете достичь обратной совместимости, сохранив номер версии в заголовке файла, а затем передав этот номер в каждую функцию load . Это работает, хотя код может стать громоздким в обслуживании.

 void load (InStream & in, u32 fileVersion) { in >> m_position; в >> m_direction; if (fileVersion> = 2) { in >> m_velocity; } } 

Можно написать более гибкий, менее подверженный ошибкам код сериализации, используя преимущества отражения, в частности, создавая данные времени выполнения, которые описывают структуру ваших типов C ++.Чтобы быстро понять, как отражение может помочь в сериализации, взгляните на то, как это делает Blender, проект с открытым исходным кодом.

Когда вы собираете Blender из исходного кода, происходит много шагов. Сначала компилируется и запускается специальная утилита с именем madedna . Эта утилита анализирует набор файлов заголовков C в дереве исходных текстов Blender, а затем выводит краткую сводку всех типов C, определенных внутри, в настраиваемом формате, известном как SDNA. Эти данные SDNA служат в качестве данных отражения .Затем SDNA связывается с самим Blender и сохраняется с каждым файлом .blend , который записывает Blender. С этого момента всякий раз, когда Blender загружает файл .blend , он сравнивает SDNA файла .blend с SDNA, привязанной к текущей версии во время выполнения, и использует общий код сериализации для обработки любых различий. Эта стратегия дает Blender впечатляющую степень обратной и прямой совместимости. Вы все еще можете загружать файлы 1.0 в последней версии Blender и новой версии .blend файлы могут быть загружены в более старых версиях.

Как и Blender, многие игровые движки и связанные с ними инструменты генерируют и используют свои собственные данные отражения. Есть много способов сделать это: вы можете проанализировать свой собственный исходный код C / C ++ для извлечения информации о типе, как это делает Blender. Вы можете создать отдельный язык описания данных и написать инструмент для генерации определений типов C ++ и данных отражения на этом языке. Вы можете использовать макросы препроцессора и шаблоны C ++ для создания данных отражения во время выполнения.И как только у вас есть данные отражения, есть бесчисленное множество способов написать на их основе универсальный сериализатор.

Ясно, что я опускаю много деталей. В этом посте я только хочу показать, что существует множество различных способов сериализации данных, некоторые из которых очень сложны. Программисты просто не обсуждают сериализацию так много, как другие системы движка, хотя большинство других систем полагаются на нее. Например, из 96 выступлений по программированию, представленных на GDC 2017, я насчитал 31 доклад о графике, 11 - об онлайн, 10 - об инструментах, 4 - об ИИ, 3 - о физике, 2 - об аудио, но только один, который касался непосредственно сериализации.

Как минимум, постарайтесь представить себе, насколько сложными будут ваши потребности. Если вы делаете крошечную игру, такую ​​как Flappy Bird, всего с несколькими активами, вам, вероятно, не нужно слишком много думать о сериализации. Вы, вероятно, можете загрузить текстуры прямо из PNG, и все будет хорошо. Если вам нужен компактный двоичный формат с обратной совместимостью, но вы не хотите разрабатывать свой собственный, обратите внимание на сторонние библиотеки, такие как Cereal или Boost.Serialization. Я не думаю, что буферы протокола Google идеально подходят для сериализации игровых ресурсов, но тем не менее их стоит изучить.

Написание игрового движка, даже маленького, - это большое дело. Я мог бы многое сказать об этом, но для сообщения такой длины это, честно говоря, самый полезный совет, который я могу придумать: работайте итеративно, сопротивляйтесь желанию немного унифицировать код и знайте, что сериализация - это большой тему, чтобы вы могли выбрать подходящую стратегию. По моему опыту, каждая из этих вещей может стать камнем преткновения, если ее игнорировать.

Мне нравится сравнивать заметки по этому поводу, поэтому мне было бы очень интересно услышать отзывы других разработчиков.Если вы написали движок, привел ли ваш опыт к такому же выводу? И если вы его еще не написали или просто думаете об этом, меня тоже интересуют ваши мысли. Что вы считаете хорошим источником для обучения? Какие части все еще кажутся вам загадочными? Не стесняйтесь оставлять комментарии ниже или пишите мне в Twitter!

.

Простое пошаговое руководство (2020)

Перейти к содержанию

Информация о колледже

Полное руководство по созданию персонального веб-сайта Меню 2 СодержаниеЗакрыть меню мобильной навигацииclose Оглавление
  1. 4 причины, почему вам нужно сделать личный Веб-сайт
    1. Еще не убедили?
  2. Шаг 1. Получите доменное имя и хостинг
    1. Как выбрать отличное доменное имя
    2. Пора получить доменное имя и веб-хостинг.
  3. Шаг 2: Установите WordPress и настройте свой сайт
    1. Настройка вашего сайта
    2. Активация SSL на вашем сайте
    3. Знакомство с WordPress
    4. Измените структуру постоянной ссылки
    5. Настройка структуры страницы
    6. Создание Страница «Обо мне»
    7. Установите страницу «Обо мне» в качестве домашней страницы
    8. Необязательно: добавление страницы блога
    9. Теперь все готово.
  4. Шаг 3: Настройте дизайн вашего веб-сайта с помощью темы
    1. 4 отличных рекомендаций по темам
    2. Установите свою тему
    3. Воспользуйтесь инструментом настройки
    4. Настройте свое меню
  5. Шаг 4: Улучшите свой сайт с помощью плагинов и виджеты
    1. Essential Plugins
    2. Давайте виджеты!
    3. Готово!
  6. Шаг 5 (необязательно): сделайте свой веб-сайт еще лучше
    1. Персональный веб-сайт SEO: убедитесь, что вы появляетесь в результатах поиска Google
    2. Обновление вашего мозга
    3. Обновите свой сайт
  7. Заключение: куда двигаться дальше
МенюЗакрыть мобильное меню навигацииclose Start Here Темы:
  • Обучение и обучение
  • Производительность
  • Карьерные навыки
  • Жизненные навыки
  • Удаленный
  • Просмотреть все статьи
  • Бесплатная учебная книга
  • О
  • Контактная информация Список
  • Study Music
  • Отказ от ответственности и условия использования
  • Политика конфиденциальности
  • Отказ от ответственности в отношении файлов cookie
  • Начните здесь
  • Темы
    • иконок новое
.

Смотрите также

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Одноклассники
Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий