Я пытаюсь понять, как лучше всего реализовать вложенные переходы между состояниями в однопоточном языке программирования (Actionscript). Скажем, у меня есть структура, подобная этому дереву поведения:
Теперь представьте, что каждый конечный узел является точкой назначения на веб-сайте, например, изображение в галерее или комментарий, вложенный в представление записи, вложенное в представление страницы... И цель состоит в том, чтобы иметь возможность запускать анимированные переходы из листа узел к конечному узлу, анимируя предыдущее дерево (снизу вверх) и анимируя текущее дерево (сверху вниз).
Итак, если бы мы находились в самом нижнем левом конечном узле и хотели перейти к самому нижнему правому конечному узлу, нам пришлось бы:
- переход из нижнего левого узла
- по завершении (скажем, после секунды анимации), переход от родителя,
- по завершении, переход от родителя
- по завершении переход В самый правый родитель
- по завершении переход в самый правый дочерний элемент
- в комплекте, переход в листе
Мой вопрос:
Если вы представляете каждый из этих узлов как представления HTML (где листья являются «частичными», термин заимствован из rails) или представления MXML, где вы вкладываете подкомпоненты, и вам не обязательно знать уровни вложения из корень приложения, как лучше всего анимировать переход, как описано выше?
Один из способов — сохранить все возможные пути глобально, а затем сказать «Приложение, переход от этого пути, переход по этому пути». Это работает, если приложение очень простое. Вот как это делает Gaia, фреймворк ActionScript. Но если вы хотите, чтобы он мог переходить в/из произвольно вложенных путей, вы не можете хранить это глобально, потому что:
- Actionscript не мог справиться со всей этой обработкой
- Не похоже на хорошую инкапсуляцию
Таким образом, этот вопрос можно переформулировать так: как анимировать самый левый конечный узел и его родителей, начиная с листа, и анимировать самый правый конечный узел, начиная с корня? em> Где хранится эта информация (что переходить внутрь и наружу)?
Другим возможным решением было бы просто сказать: «Приложение, переход от предыдущего дочернего узла, а когда это будет завершено, переход к текущему дочернему узлу», где «дочерний узел» является прямым дочерним элементом корня приложения. Затем самый левый дочерний элемент корня приложения (у которого есть два дочерних узла, каждый из которых имеет два дочерних узла) будет проверять, находится ли он в правильном состоянии (если его дочерние элементы «перешли»). Если нет, он вызовет для них "transitionOut()"... Таким образом, все будет полностью инкапсулировано. Но похоже, что это будет довольно интенсивно процессор.
Что вы думаете? У вас есть другие альтернативы? Или вы можете указать мне какие-либо хорошие ресурсы по дереву поведения ИИ или иерархическому State Machines, которые описывают, как они практически реализуют асинхронные переходы между состояниями:
- Откуда они вызывают "transitionOut" на объекте? Из корня или конкретного ребенка?
- Где хранится состояние? Глобально, локально? Какова область, определяющая, что вызывает «transitionIn()» и «transitionOut()»?
Я видел/читал много статей/книг по ИИ и конечным машинам, но мне еще предстоит найти что-то, описывающее, как они на самом деле реализуют асинхронные/анимированные переходы в сложном объектно-ориентированном проекте MVC с сотнями представлений/графиков, участвующих в дереве поведения.
Должен ли я вызывать переходы из самого родительского объекта или из дочернего?
Вот некоторые из вещей, которые я изучил:
- Архитектура для искусственного интеллекта игрового поведения: мультиочереди поведения
- Иерархические конечные автоматы — принципиально важный способ проектирования
- Программирование игрового ИИ на примере
- Поведение агента, ориентированное на достижение цели
- Расширенное управление состоянием, Трой Гарднер
- Библиотека AS3 COGS компании Troyworks
- Популярные подходы к проектированию дерева поведения
- Создание управляемых событиями условий для асинхронной сенсорной системы
Хотя это не обязательно проблема ИИ, нет других ресурсов, описывающих, как применять архитектуры вложенных состояний к веб-сайтам; это самые близкие вещи.
Другой способ сформулировать вопрос: как вы транслируете изменения состояния в приложение? Где вы держите слушателей событий? Как определить, какое представление анимировать, если оно произвольно вложено?
Примечание. Я не пытаюсь создать игру, я просто пытаюсь создавать анимированные веб-сайты.