Я пытаюсь обдумать лучший способ реализации вложенных переходов состояний в однопоточном языке программирования (Actionscript).Скажем, у меня есть структура, подобная этому дереву поведения: ![behavior tree](https://conkerjo.files.wordpress.com/2009/07/image2.png)
Теперь представьте, что каждый конечный узел является точкой назначения на веб-сайте, например, изображением в галерее, или комментарием, вложенным в представление сообщения, вложенное впросмотр страницы ... И цель состоит в том, чтобы иметь возможность запускать анимированные переходы от конечного узла к конечному узлу путем анимации предыдущего дерева (снизу вверх) и анимации в текущем дереве (сверху вниз).
Итак, если бы мы были в самом нижнем левом листовом узле и хотели бы перейти в самый нижний правый конечный узел, мы должны были бы:
- завершить переход нижнего левого узла
- по завершении (скажем, через секунду анимации), перейти к родительскому элементу,
- при завершении, перейти к родительскому
- по завершении, переход IN к самому правому родителю
- при завершении, переход к правому самому ребенку
- по завершению, переход в лист
Мой вопрос:
Если вы представляете каждый из этих узлов как HTML views (где листья являются «частичными», заимствуя термин из rails) или представления MXML, где вы вкладываете подкомпоненты, и вы не обязательно знаете уровни вложенности из корня приложения, что является лучшим способомАнимировать переход, как описано выше?
Один из способов - сохранить все возможные пути глобально, а затем сказать: «Приложение, переход с этого пути, переход по этому пути».Это работает, если приложение очень простое.Вот как Gaia делает это, ActionScript Framework.Но если вы хотите, чтобы он мог входить и выходить произвольно вложенными путями, вы не можете хранить это глобально, потому что:
- Actionscript не может обработать всю эту обработку
- не похоже на хорошую инкапсуляцию
Таким образом, этот вопрос можно перефразировать следующим образом: как вы анимируете левый крайний узел и его родителей, начиная с листа, и анимируете всамый правый конечный узел, начинающийся с корня? Где хранится эта информация (для чего входить и выходить)?
Другим возможным решением было бы просто сказать «Приложение, переход предыдущийдочерний узел, и когда это будет завершено, перейдите в текущий дочерний узел », где« дочерний узел »является прямым дочерним элементом корня приложения.Затем самый левый дочерний элемент корня приложения (который имеет два дочерних узла, каждый из которых имеет два дочерних узла), проверит, находится ли он в правильном состоянии (если его дочерние элементы «переходили»).Если нет, он вызовет для них «transitionOut ()» ... Таким образом, все будет полностью инкапсулировано.Но похоже, что это будет довольно интенсивно использовать процессор.
Что вы думаете?Есть ли у вас другие альтернативы?Или вы можете указать мне какие-нибудь полезные ресурсы на деревьях поведения AI или машинах иерархического состояния, которые описывают, как они практически реализуют асинхронные переходы состояний:
- Откуда они называют "transitionOut"на объекте?От корня или конкретного потомка?
- Где хранится состояние?Глобально, локально?Какова область действия, определяющая то, что вызывает «transitionIn ()» и «transitionOut ()»?
Я видел / читал много статей / книг по ИИ и государственным машинам, но мне еще предстоит что-то найтиописание того, как они фактически реализуют асинхронные / анимированные переходы в сложном объектно-ориентированном проекте MVC с сотнями видов / графиков, участвующих в дереве поведения.
Должен ли я вызывать переходы из самого родительского объекта или из дочернего объекта?
Вот некоторые из вещей, которые я исследовал:
Хотя это не обязательно проблема ИИ, нет других ресурсов, описывающих, как применять архитектуры вложенных состояний к веб-сайтам; это самые близкие вещи.
Другой способ сформулировать вопрос: как вы транслируете изменения состояния в приложение? Где вы храните слушателей мероприятия? Как найти, какой вид анимировать, когда он произвольно вложен?
Примечание: я не пытаюсь создать игру, просто пытаюсь создавать анимированные сайты.