Советы и рекомендации по дизайну и оптимизации 2D-игр - PullRequest
1 голос
/ 28 сентября 2010

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

Игра, которую я сейчас реализую, для которой будет снят движок, представляет собой 2D-платформер на основе тайлов с МНОГИМИ тайлами (около 3500). Я начну с некоторых советов, которые я до сих пор выучил.

  • Области перерисовки - только области перерисовки, которые меняются
  • Избегайте ненужных вызовов функций (Firefox не любит их слишком много)
  • Используйте DOM, если можете
  • Куски плитки вместе для быстрого доступа

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

Ссылки / ресурсы были бы хорошими. Особенно для физики или важной математики.

1 Ответ

4 голосов
/ 28 сентября 2010

Рисовать только те элементы, которые видны, то есть рисовать только плитки и т. Д., Которые в данный момент находятся на экране. Для плиток это довольно просто: если у вас много сущностей, вы можете либо использовать скользящее окно, чтобы сохранить список локальных объектов экрана, либо использовать такую ​​вещь, как квадродерево.

Поскольку нет простого / быстрого способа скопировать один холст на другой, перерисовка областей действительно сложна, поскольку вы не можете сохранить в буферизованном состоянии (например) фон, если он не изменился. Так что хранение списка «грязных прямоугольников» наверняка приведет к дополнительным вычислительным затратам.

Вся тема очень широкая, даже обработка скорости FPS может быть довольно сложной, этот вопрос содержит несколько хороших ссылок и ответов на эту тему:
https://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step

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

В прошлом я делал несколько довольно простых 2D-игр, большинство из которых не на JavaScript, но они должны дать вам несколько подсказок:
http://github.com/BonsaiDen/Norum
(Демонстрация движка Platformer в C, зоны камер, движущиеся платформы)

http://github.com/BonsaiDen/Tuff
(2D-платформер на Java, не законченный, бонусы и некоторые интересные вещи)

http://github.com/BonsaiDen/NodeGame-Shooter
(2D многопользовательский космический шутер, написанный на JS, с использованием Node.js для сервера и WebSockets для связи)

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

Если вы хотите получить более точные ответы, вам следует открыть вопросы по отдельным компонентам, с которыми вы столкнулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...