Войти
Gamedev LectureСтатьи

Лекция #27. "Треп Даггера про игровую механику" Организация игровой механики (Не лекция) [Лектор - DaGGeR]

Автор:

Disclaimer: некоторые опечатки поправлены, некоторые реплики передвинуты.

<DaGGeR> Значит как я это делаю. На уберправильность не претендую, но работает хорошо.
<DaGGeR> Два основных понятия в игровой логике это Мир и Актор.
<DaGGeR> Мир представляет собой класс который как ни странно менеджит игровой мир.
<DaGGeR> Он умеет: 1. создавать акторов через фабрики
<DaGGeR> 2. Апдейтиться через deltatime изменяя свои параметры (там гравитацию поменять, и т.д)
<DaGGeR> 3. Апдейтить Акторов
<DaGGeR> 4. Убивать Акторов

<DaGGeR> Теперь про акторов
<DaGGeR> Актор это базовый класс от которого наследуются все объекты в игровом мире.
<DaGGeR> Актор может быть создан только миром через фабрику
<DaGGeR> Актор умеет:
<DaGGeR> 1. Апдейтиться по прошествию deltatime
<DaGGeR> 2. Сообщать о своем состоянии миру
<DaGGeR> Например в актора попала ракета.
<DaGGeR> Он убит и должен исчезнуть.
<DaGGeR> Он выставляет у себя cпециальный параметр LifeTime=0
<DaGGeR> и мир в следующий проход удаляет его
<DaGGeR> Конечно можно сделать чтобы мир сам при обработке столкновения актора с ракетой обработал это событие и удалил актора
<DaGGeR> но при этом теряется гибкость.
<Cote-Duke> Должен согласиться с Дагом.
<DaGGeR> С другой стороны в моей реализации актор обязан знать что с ним столкнулось и как на это реагировать
<DaGGeR> но все решается дефолтной реакцией + расширения на акторов, на которых он должен както особенно реагировать

<DaGGeR> Так вот
<DaGGeR> как это сейчас реализовано.
<DaGGeR> щас псевдокод набросаю
<DaGGeR> пока можно вопросы если вдруг есть
<DaGGeR> :))
<Cote-Duke> Могу сказать что это классика. В своей версии я ещё добавил workgroups для акторов (entity) что-бы они могли апдейтиться в разные промежутки времени с разной частотой. (fixed time step)

<kas> раскрой тему разного апдейта
<ShTiRLiC> Что-то мне как-то примитивной схема показалась...
<ShTiRLiC> Обычно сложнее описывают
<Cote-Duke> Simplicty the genius.
<ShTiRLiC> Или я путаю логику игры со структурой движка?..
<ShTiRLiC> Не, ну это понятно
<_ShaMan_> это в общих чертах
<kas> я видать пропустил
<kas> но ето для какого жанра?
<Cote-Duke> Я думаю почти для любого.
<ShTiRLiC> В данном случае не рассмотрена подробная классификация акторов
<kas> ну, чем ето лучше чем скажем саморегаца в мире и из какихнить скриптов там создаваться
<ShTiRLiC> Поэтому такое базовое деление - да, для любого
<kas> или ешё чего
# kas нивидит мегобонуса

<kas> подробная класификация не интересна, ибо ето личный конкретный случай
<DaGGeR> кас
<kas> ась
<DaGGeR> это ты пытаешся скатиться к единичным случаям
<kas> м?
<DaGGeR> а я говорю о базовой концепции
<kas> не понял про единичные случаи
<DaGGeR> скриптовый актор у меня наследуется от базового и хорошо живет
<kas> ну, тогда определено надо какихто подробностей

<DaGGeR> http://www.everfall.com/paste/id.php?5qqh3r51n9fp
<DaGGeR> вот так примерно выглядит основной функционал мира
<DaGGeR> http://www.everfall.com/paste/id.php?wbf9tz9kdust
<DaGGeR> а вот так - актор
<DaGGeR> есть несколько тонких моментов
<DaGGeR> например если програмер решил удалить актора в ручную а не выставлять ему лайфтайм
<DaGGeR> в таком случае у меня актор в деструкторе сам сообщает миру, что "не жди меня мама..."
<DaGGeR> и мир вычеркивает его из списка живых не дожидаясь следующего тика

<DaGGeR> сейчас как временная мера реализована саморегистрация приблудных акторов в конструкторе
<DaGGeR> не зря же там World* передается
<DaGGeR> но я потихоньку от таких беспризорников избавляюсь

<DaGGeR> вот собственно и все
<DaGGeR> абстрактно но работоспособно хоть в 2д аркаде хоть в гоночном симуляторе
<DaGGeR> я уложился в 15 минут? :)

17 июня 2006

Комментарии [12]