Программирование игр: общие методы и шаблоны проектирования [закрыто]

9

Я начал писать очень простой игровой движок, чтобы лучше изучать OpenGL 3.x, но, поскольку у меня неопытность и скудные знания о том, как должна создаваться 3D-игра, я обычно сталкиваюсь с проблемами, когда осознаю, что должен был разработать свои классы. иначе. Другие проблемы, с которыми я сталкиваюсь, - как кратко отслеживать время в игре и обновлять движение по мере необходимости, а также как сообщать визуализатору, что ему нужно перерисовать. Кроме того, мне постоянно нужно создавать функции Get и Set для передачи различных флагов от одного объекта к другому, это плохая практика?

Итак, как следует из названия, меня интересуют любые книги или статьи / учебные пособия и источники, которые могли бы помочь мне и объяснить некоторые общие шаблоны проектирования в игровом дизайне (например, обработчики состояния игры, шрифты и т. Д.).

Кстати, я все еще использую freeglut, вы бы порекомендовали мне перейти на более качественную систему управления окнами до того, как вы начнете прогрессировать или после того, как я лучше пойму OpenGL?

Grieverheart
источник
12
Стандартный ответ «Я пишу движок» = пишите игры, а не двигатели. Двигатели - это глубокая кроличья нора, в которую можно попасть. Какие исследования вы уже провели? Здесь вы получите лучшие результаты, выбрав отдельную целевую проблему и выполнив поиск по прошлым вопросам. Продолжайте искать новые проблемы по мере их появления во время написания вашей игры, по одному за раз. Напомним, что понимание того, что классы нуждаются в редизайне, является распространенным явлением, а процесс, который называется «рефакторинг», означает, что вы учитесь по ходу дела, и это хорошо.
Патрик Хьюз
1
Спасибо за ваш ответ. Извините, если мне неясно, я действительно не хочу создавать полноценный игровой движок, но я бы хотел изучить некоторые базовые шаблоны дизайна, используемые в игровом дизайне, чтобы лучше проектировать свои классы. Я думаю, что должны быть некоторые общие решения общих проблем. Чем глубже я углубляюсь в дизайн, тем больше проблем возникает и тем сложнее найти ответы. Мои исследования до сих пор не были слишком плодотворными, хороший учебник, который я нашел, который углубляется в создание игры, - codeproject.com/Articles/27219/… .
Grieverheart
1
Я вижу, что включение "общих методов игрового движка" в заголовок ведет к обсуждению ... engine =) В любом случае причина, по которой вам трудно получить то, что вы ищете, состоит в том, что их так много. различные типы игр, поскольку в календаре майя есть годы, и у каждого типа есть свои потребности. Вы можете получить лучшие результаты, если вы ищете определенный тип игры, шутер от первого лица очень распространен, чтобы дать поисковым системам некоторую тягу.
Патрик Хьюз
Стиль FPS или свободный роуминг - это то, что я ищу. По сути, я хотел бы создать мир, в котором я могу экспериментировать с различными графическими и анимационными методами. У меня уже есть базовая камера и движение, такие как прыжки, стрельба и загрузка моделей, но это не совсем правильно, например, я помещаю анимацию ходьбы в класс камеры и использую внутреннюю переменную для подсчета кадров. Я в основном исправляю дыры и не создаю ничего надежного. Я думаю, что это часть процесса обучения, и, возможно, я пытаюсь двигаться слишком быстро.
Grieverheart
3
Кодирование игры завершено, архитектура игрового движка - это две книги о программировании игр, вы получите общий обзор конвейера разработки и лежащей в основе технологии, они касаются всего понемногу
dreta

Ответы:

11

Я напишу правильный ответ, так как я был на вашем этапе около 2 месяцев назад.

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

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

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

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

Кроме того, мне постоянно нужно создавать функции Get и Set для передачи различных флагов от одного объекта к другому, это плохая практика?

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

Это все дело опыта. Вы напишите класс камеры, затем вы увидите, какие функции вы хотите от него, кроме матриц преобразования. Если вы хотите немедленных советов, я бы сказал, реализовать голые, расширить позже.

Статьи и книги:

  • Разработка игрового движка

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

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Обнаружение столкновений

http://www.peroxide.dk/papers/collision/collision.pdf

(Я связываю это, потому что мне было трудно найти статьи о том, как сделать правильное 3D-обнаружение столкновений.)

Книг больше, но когда вы закончите с этим (особенно с Game Engine), вы будете лучше понимать, чего хотите.

Кстати, я все еще использую freeglut, вы бы порекомендовали мне перейти на более качественную систему управления окнами до того, как вы начнете прогрессировать или после того, как я лучше пойму OpenGL?

WinAPI, если вы чувствуете, что у вас есть время и желание изучать программирование для Windows (если вы разрабатываете для Windows). FreeGLUT отлично подходит для обучения, но в конечном итоге вам понадобится больше функциональности. Однако, если вы хотите пойти совершенно другим путем, вы можете запустить OpenGL с такими библиотеками, как SFML или SDL. Придерживайтесь FreeGLUT, если вы не упрямый, как я. Я пошел прямо к WinAPI.

Dreta
источник
Эй, Дрета, большое спасибо за твой очень хороший ответ, которого я ждала: P! К счастью, я уже знаю, как сделать обнаружение столкновений, так как я уже реализовал некоторые алгоритмы для моделирования физики :).
Grieverheart
@ user1294203 Круто, я был потерян при запуске, поэтому просто опубликовал его на
всякий
Я голосую за SFML, если вы не хотите слишком много возиться с кодом, специфичным для платформы. Он маленький, простой, чистый, и вы можете легко погрузиться в код, чтобы понять, например, как он оборачивает WINAPI.
edin-m