Теория игр ООП
Я пытался разработать 2D-игру с С++ в прошлом, используя простые объекты, однако в процессе проектирования я не знаю, как и какие части ядра я должен разделить на более мелкие объекты, что именно они должны делать и как заставить их взаимодействовать друг с другом должным образом. Я ищу книги, учебники, документы, все, что подробно объясняет дизайн игрового движка. Спасибо.
Ответы
Ответ 1
Обязательное чтение: http://scientificninja.com/advice/write-games-not-engines
Почему, по-вашему, вам нужен игровой движок? Напишите код, необходимый для реализации вашей игры. Измените его по мере изменения требований. И когда у вас есть полная игра, сделайте шаг назад и посмотрите, как выглядит результат.
Вы не можете и не должны составлять полную диаграмму классов в начале. Нарисуйте общее представление о том, какие общие компоненты вы хотите, и каковы должны быть их обязанности, а затем попытайтесь его закодировать. Начните с классов, в которых вы уверены. Рано или поздно некоторые из них станут большими и громоздкими, поэтому вы разделите их на несколько меньших. Иногда вы можете обнаружить, что несколько классов в основном делают одно и то же, поэтому вы объединяете их вместе. Надеюсь, рано или поздно вы получите дизайн, в котором работает, что больше, чем вы могли бы получить, если бы попытались создать игровой движок спереди.
Ответ 2
Если вы еще не сделали игру раньше, как вы можете сделать движок? Там тонны бесплатных двигателей, или вы потратите 20 лет, пытаясь что-то сделать, потому что вы будете переписывать снова и снова.
Ответ 3
В игре есть два важных типа объектов. Есть объекты, которые содержат процессы, и есть объекты, которые взаимодействуют с окружающей средой и пользователем.
Для тех объектов, которые выполняют такой процесс, как изменение непрозрачности объектов, вы хотите, чтобы они были независимыми от любых переменных уровня класса. Они должны просто принимать значения и возвращаемые значения. Если у вас есть процесс вычисления силы тяжести, процесс должен принимать объект, на который рассчитывается гравитация, и возвращать величину тяжести, которую испытывает объект, и направление силы тяжести, если игра проходит в пространстве.
Вторые более важные типы объектов - это те, которые взаимодействуют с пользователем и средой. Эти объекты должны не иметь одного и того же базового класса. Базовому классу потребуется изображение, а также позиция x и y и могут иметь переменные, которые выполняют определенные процессы, такие как изменение скорости или направления переменной.
Используя этот базовый класс, вы можете выполнять такие процессы, как упомянутый выше метод гравитации, используя все объекты "встроенные" переменные, такие как скорость, направление и положение x и y.
Вы также захотите настроить свои объекты для запуска peices кода при определенных условиях. Может быть хорошей идеей, чтобы ваш базовый класс предоставлял функции, которые запускаются при выполнении одного из этих условий. Некоторыми полезными условными функциями являются условная функция, которая возникает, когда объект сначала создается и когда он уничтожается. Устанавливается условная функция после таймера. Условный функционал постоянно, где вы можете размещать код для рисования изображений на экране. Выключить условную функцию Когда нажата клавиша или кнопка мыши. Условная функция, чтобы уйти с установленного количества раз в секунду, чтобы вычислить такие вещи, как гравитация на объекте.
Эта схема очень хорошо работала для меня при создании игр. Он работает для любого типа игры и работает ужасно для других типов программ. Извините, если мой сценарий неясен, я печатаю на своем iPod, и мне было бы трудно вернуться и редактировать вещи здесь.
Ответ 4
Eberly Архитектура 3D-игрового движка и Дизайн 3D-игр довольно тяжелы в теории, но достаточно хорошо покрывают все базы.
Ответ 5
http://fivedots.coe.psu.ac.th/~ad/jg/
Этот парень выкладывает хороший стиль oop, и благодаря книге вы можете создать рамку двигателя. Это замечательно.