K5EngineФорум

Система действий (комментарии)

#0
20:03, 27 фев 2012

Система действий (комментарии)

Это сообщение сгенерировано автоматически.

#1
20:03, 27 фев 2012

У меня вопрос - в статье описаны только основные классы-действия или в реальной игре их намного больше?

#2
21:43, 27 фев 2012

В реальной игре классов-действий будет явно поболее чем есть нынче в движке. На все случаи просто не запасёшься готовыми компонентами, нынче предоставлена база для написания собственной логики и часто использующихся классы.

Например, сделаем объект-броневик:
1. Создаём класс башни, что бы она могла реагировать на события, наследуем её от TBaseActon. Добавляем в неё нужные спрайты, позицию и угол наклона.
Спрайты башни прикрепляем к её позиции и углу при помощи TActionJoin. Добавляем анимацию выстрела, взрыва ну и какие нибудь ещё покадровые анимации - TActionSpriteTextureAnimation.
Потом реализуем слежение за курсором - определяем направление вращения и при помощи TActionAngleIterator вращаем башню в нужную сторону.

2. Создаём класс корпуса, наследуем её от TBaseActon, ему так же нужна позиция и угол поворота.
Корпусу добавляем покадровые анимации TActionSpriteTextureAnimation. Соответственно корпусу тоже нужны свои спрайты.
Пишем логику, которая позволяет вращать и двигать корпус.

3. Создаём класс "броневик". Наследуем его от TBaseActon.
В класс добавляем ранее описанные корпус и башню. Башню привязываем к корпусу при помощи всё того же TActionJoin.
Добавляем броневику праметры жизней, индикатор здоровья ну и тд.

Вот в первом приближении наш герой игры готов.


Ну и ещё как пример из реального проекта - весь интерфейс, персонаж, клетки карты, бомбы-снаряды, элементы окружения, это всё так или иначе наследники от TBaseActon.

#3
22:59, 27 фев 2012

Monax-At
Не в читывался в реализацию -  но направление правильно!

Что бы понять к чему ты пришел - изучи GOAP

http://web.media.mit.edu/~jorkin/goap.html

#4
23:39, 27 фев 2012

IROV..
Бегло посмотрел что такое GOAP. Всё же это совсем другая вещь.
В движке сделан простой класс-реакцияна событие (TBaseAction)  и небольшая инфраструктура к нему (списки, менежеры, готовые екшены). Как и для чего будет программист его использовать, это уже от самого программиста зависит.
Фактически его можно рассматривать как некую специализированную реализацию функтора.

#5
23:50, 27 фев 2012

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)
#6
0:21, 28 фев 2012

IROV..
Мне к сожалению времени нет его внимательно изучать, сейчас стоят совсем другие задачи в работе.
Конечно система интересная, не спорю :)

В примере вижу что добавляется две параллельные задачи, плюс потом ещё две.
На сколько понял, код приведён как пример аналога очереди екшенов и контейнера екшенов?
И на сколько могу предположить, на GOAP можно и логику и поведение GUI делать, так как графически это всё те же самые объекты сцены, над которыми возможны манипуляции?.

#7
19:10, 28 фев 2012

Monax-At
Тяжело читать монолитный текст.

#8
20:38, 28 фев 2012

dige
Посмотри сейчас, попробовал улучшить форматирование.
Плюс можно скачать статьи в pdf по этой ссылке: статьи, может они будут более удобны для чтения.

K5EngineФорум

Тема в архиве.