![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Игровая логика
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]Если знать рациональные ответы на все твои вопросы, то можно смело браться за написание собственного движка %)