Система действий (комментарии)
Это сообщение сгенерировано автоматически.
У меня вопрос - в статье описаны только основные классы-действия или в реальной игре их намного больше?
В реальной игре классов-действий будет явно поболее чем есть нынче в движке. На все случаи просто не запасёшься готовыми компонентами, нынче предоставлена база для написания собственной логики и часто использующихся классы.
Например, сделаем объект-броневик:
1. Создаём класс башни, что бы она могла реагировать на события, наследуем её от TBaseActon. Добавляем в неё нужные спрайты, позицию и угол наклона.
Спрайты башни прикрепляем к её позиции и углу при помощи TActionJoin. Добавляем анимацию выстрела, взрыва ну и какие нибудь ещё покадровые анимации - TActionSpriteTextureAnimation.
Потом реализуем слежение за курсором - определяем направление вращения и при помощи TActionAngleIterator вращаем башню в нужную сторону.
2. Создаём класс корпуса, наследуем её от TBaseActon, ему так же нужна позиция и угол поворота.
Корпусу добавляем покадровые анимации TActionSpriteTextureAnimation. Соответственно корпусу тоже нужны свои спрайты.
Пишем логику, которая позволяет вращать и двигать корпус.
3. Создаём класс "броневик". Наследуем его от TBaseActon.
В класс добавляем ранее описанные корпус и башню. Башню привязываем к корпусу при помощи всё того же TActionJoin.
Добавляем броневику праметры жизней, индикатор здоровья ну и тд.
Вот в первом приближении наш герой игры готов.
Ну и ещё как пример из реального проекта - весь интерфейс, персонаж, клетки карты, бомбы-снаряды, элементы окружения, это всё так или иначе наследники от TBaseActon.
Monax-At
Не в читывался в реализацию - но направление правильно!
Что бы понять к чему ты пришел - изучи GOAP
IROV..
Бегло посмотрел что такое GOAP. Всё же это совсем другая вещь.
В движке сделан простой класс-реакцияна событие (TBaseAction) и небольшая инфраструктура к нему (списки, менежеры, готовые екшены). Как и для чего будет программист его использовать, это уже от самого программиста зависит.
Фактически его можно рассматривать как некую специализированную реализацию функтора.
Monax-At
Изучи ___внимательно___ GOAP
вот его использование на питоне например
with source.addParallelTask(2) as (tcp0, tcp1): tcp0.addTask( "TaskNodeBezier2To", Node = ItemEntity, Point1 = P1, To = P2, Speed = self.speed) tcp1.addTask( "TaskNodeScaleTo", Node = ItemEntity, To = (scaleTo, scaleTo), Time = time ) pass source.addTask("TaskObjectSetPosition", Object = Item, Value = (0, 0)) source.addTask("TaskEnable", Object = Item, Value = False)
IROV..
Мне к сожалению времени нет его внимательно изучать, сейчас стоят совсем другие задачи в работе.
Конечно система интересная, не спорю :)
В примере вижу что добавляется две параллельные задачи, плюс потом ещё две.
На сколько понял, код приведён как пример аналога очереди екшенов и контейнера екшенов?
И на сколько могу предположить, на GOAP можно и логику и поведение GUI делать, так как графически это всё те же самые объекты сцены, над которыми возможны манипуляции?.
Monax-At
Тяжело читать монолитный текст.
dige
Посмотри сейчас, попробовал улучшить форматирование.
Плюс можно скачать статьи в pdf по этой ссылке: статьи, может они будут более удобны для чтения.
Тема в архиве.