Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Игровая логика


Страницы:   1 2

Stalker_23b ©   (2004-01-11 23:57:00) 

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


Omar2002   (2004-01-12 21:28:00) [21]

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


Vertex   (2004-01-12 16:38:00) [22]

Пишешь класс работающий с указателями на объекты, он будет использовать TList. Описываешь в нем функции добавления, удаления, поиска, доступа и т.д., в зависимости от твоих потребностей. Создаешь класс прородич всех твоих игровых классов, указателем его типа и будет орудовать TList. Все, далее тебе остается тока создавать иерархию классов, но с условием, что все они наследованы от базового, так что тебе никто не запретит пихать их в лист. Как совет, описать еще в базовом классе виртуальные функции отрисовки и отработки и т.д. (типа Draw, Process, OnMouseDown, OnMouseUp, SaveToFile, LoadFromFile), которые будешь вызывать в таймере при прорисовке или при загрузке. Их ты будешь перегружать в нужных потомках, для того, чтобы например нарисоваться по другому.
Но это полбеды, на определенном этапе тебе понадобится доступ из одного класса, например из персонажа к бочке, к которой он подошел, и вот тут гемор. Совет создавай класс типа TGame, в котором будет TList, одна функция прорисовки, процессинга, загрузки и т.д. на всеь лист. А при создании и добавлении в лист объектов передавай им указатель на класс TGame, который является их хозяином, все, теперь объекты имеют доступ ко всему, достаточно гибкая система, но со своими проблемами. А ваще иди к этому сам, дольше идти, но зато когда придешь будешь знать, а главное понимать на много больше, чем те, кто задает вопросы и не всегда получает на них ответы в этих форумах).


NikeOLD   (2004-01-12 12:39:00) [23]

Посмотри исходники DelphiX от Хори. Там все ясно и понятно даже без комментариев
Подсказака: смотри модули где спрайты описаны и движок (engine), сейчас не помню названия :)


cyborg   (2004-01-12 09:22:00) [24]

>>В каждой игре мы имеем дело с большим набором динамических
>>взаимодействующих объектов. Как все это организовать?

Это зависит от типа игры. 2D, 3D, RTS, RPG, аркада, логическая, походовая и пр.

Для объектов выход один - список, т.е. структура, в которой имеются указатели на другие объекты (предыдущий, следующий).

>>Как организовать надежный просчет,
>>реакцию на событие и динамику объектов?

Надёжный он и так будет, еслю глюков не напишеш ;). Выход в списках.

>>Как построить оптимальную иерархию классов и логику для данной игры?

Зависит от игры, просто хорошо обдумай это дело, у меня вообще все объекты в игре это одна запись TSprite=record, от объекта героя, до заднего фона, только данные подключаются к нему в зависимости от самого объекта.

>>Как управлять объектами, сохранять\загружать их из файла?

Последовательный перебор по списку всех объектов, которые нужно обработать в данный момент.

>>Какие решения вы обычно используете в играх?

Зависит от типа игры.


K.o.Z   (2004-01-12 03:34:00) [25]

Если знать рациональные ответы на все твои вопросы, то можно смело браться за написание собственного движка %)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо