Каковы хорошие ресурсы для разработки 2D-игрового движка?

Я занимаюсь разработкой 2D игр с использованием С++ и DirectX в свободное время. Я нахожу, что подход к моделированию проблемной области предприятия не помогает столько, сколько я хотел бы;)

Я более или менее ищут "лучшие практики", эквивалентные базовому дизайну игрового движка. Как субъекты должны взаимодействовать друг с другом, как анимации и звуки должны быть представлены в идеальном мире и т.д.

У кого-нибудь есть хорошие ресурсы, которые они могут порекомендовать?

Ответ 1

Gamedev.net обычно я перехожу, чтобы понять, что делают другие люди в сообществе разработчиков игр.

Тем не менее, я боюсь, что вы обнаружите, что идея "лучших практик" в разработке игр более волатильна, чем большинство. Игры, как правило, являются такими специализированными приложениями, что почти невозможно дать ответы "один размер подходит всем". То, что отлично работает для Tetris, будет бесполезно с астероидами, и модель, которая отлично работает для Halo, скорее всего, потерпит неудачу для Марио.

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

Если вы новичок в разработке игр, мой совет будет таким: не убивайте себя над своей структурой кода в первый раз. Попробуйте простую игру, такую ​​как астероиды, и просто взломайте ее до тех пор, пока она не будет работать, независимо от того, как "уродливый" код. Используйте простые форматы, с которыми вы знакомы, не беспокоясь о том, насколько хорошо они будут задерживаться в крупных проектах. Не беспокойтесь о плагинах, скинах, редакторах или любом другом пухом. Просто сделай РАБОТУ! Затем, когда вы закончите с этим сначала, всю важную игру, выберите другую, и на этот раз очистите один или два аспекта вашего кода (но не заходите за борт!) Оттуда итерации!

Я обещаю вам, что это ускорит вас, чем любое количество выталкивания в Интернете для "правильного пути", когда-либо (это исходит от кого-то, кто сделал много шутки).

И одна последняя мысль для вас: если вы чувствуете себя более комфортно, работая в более четко определенном пространстве, посмотрите XNA или аналогичная библиотека. Они будут заранее определять некоторые из "лучших" форматов для использования и давать вам инструменты для работы с ними, что требует некоторых из исходных предположений.

Удачи и, прежде всего, помните: Игры (и их развитие) должны быть FUN! Не слишком увлекайтесь мелочами!

Ответ 2

Сделайте игру. После того, как вы закончите, сделайте еще один. Посмотрите, что вам понравилось, а что вам не понравилось, а затем сделайте еще один.

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

Ответ 3

В значительной степени любая книга, в которой Andre Lamothe является одним из участников.

GameDev содержит множество статей.

Ответ 4

Я не могу согласиться с вами больше: корпоративные приложения не готовят вас к программированию игр.

Я создал несколько небольших игр в python, java, html/php и perl. Основная структура игры, как вы, наверное, знаете, такова:

Главный контур:
  handleInput()
  updateGameLogic()
  renderImages()

Теперь, что все хорошо и хорошо для одноэкранных однопоточных игр, как и все, начиная с 70-х или 80-х годов. Но я не считаю эту структуру особенно сильной для многоэкранных игр (например, RPG) или чего-то более экзотического. Он не очень хорошо работает. Код становится довольно напуганным, так как вам нужно обрабатывать различные входы. Он плохо масштабируется.

Однако, прежде чем я bash эта метафора слишком много, обратите внимание, что это ОТЛИЧНОЕ место для запуска. Я бы зашел так далеко, что рекомендовал изучить Python/Pygame и начать создавать игры с помощью этого инструмента, а не на С++, что усложняет процесс проектирования и реализации. Когда вы прототип в python, вы увидите, что игра складывается намного быстрее и сталкивается с независимыми от языка проблемами.

Для меня самыми сложными, наиболее трудоемкими аспектами игрового программирования являются графические и звуковые активы. Хотя я немного сторонник музыки и любительский музыкант, создавая правдоподобную и подходящую музыку, а SFX - это проект по-своему. У меня нет графического таланта, поэтому я должен полагаться на изменение exisitng изображений или использование свободно доступных. К счастью, есть широко доступные бесплатные шрифты, которые можно использовать для игр (и еще немного, так как они почти повсеместно плохи).

Наконец, нет ничего похожего на открытый исходный код, чтобы увидеть, как справляются с другими проектами. Battle of Westnoth - зрелая игра среднего размера. Возможно, вы захотите посмотреть, что там происходит. Опять же, игры на python часто делают исходный код доступным, поэтому вы можете посмотреть сотни проектов там. Вы также можете декомпилировать atari 2600 ROM, но это не расскажет вам о программировании сегодня. Старый VCS был специализированным устройством, которое обрабатывало его приложения очень зависимым от системы образом.:-D

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

Удачи вам в вашем проекте.

Ответ 5

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

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