Образцовый Контроллер представления играет Хорошо с деревьями искусственного интеллекта и поведения?

Я происхожу из среды MVC (Flex и направляющие) и люблю идеи разделения кода, возможности многократного использования, инкапсуляции, и т.д. Это помогает создать вещи быстро и компоненты повторного использования в других проектах. Однако было очень трудно придерживаться принципов MVC при попытке создать комплекс, управляемые состоянием, асинхронные, анимированные приложения.

Я пытаюсь создать анимированные переходы между многими вложенными представлениями в приложении, и это получило меня думающий о том, вводил ли я в заблуждение меня... Можно ли применить принципы от MVC до принципов от Искусственного интеллекта (Деревья Поведения, Иерархические конечные автоматы, Вложенные состояния), как Игры? Те две дисциплины играют приятно вместе?

Очень легко сохранить представления/графику незнакомыми с чем-либо за пределами себя, когда вещи статичны, как с системой CMS HTML или что бы то ни было. Но то, когда Вы начинаете добавлять комплекс управляемые состоянием переходы, он походит на все, должно знать обо всем остальном, и MVC почти мешает. Что Вы думаете?

Обновление:

Пример. Хорошо прямо сейчас я работаю над веб-сайтом в Flex. Я пришел к выводу, что для надлежащей анимации каждого вложенного элемента в приложении, я должен думать о них как об Агентах AI. Каждое "Представление", затем, имеет свое собственное Дерево Поведения. Таким образом, это работает, действие (показывает и прячется) на основе контекста (каковы выбранные данные, и т.д.). Чтобы сделать это, мне нужна вещь типа ViewController, я называю ее Предъявителем. Таким образом, у меня есть Представление (графика, размеченная в MXML), Предъявитель (определяющий анимации и меры, которые Представление может принять на основе состояния и вложенных состояний приложения), и Модель Презентации для представления данных Представлению (через предъявителя). У меня также есть Модели для объектов значения и Контроллеры для обработки URL и вызовов базы данных и т.д.... весь нормальный static/html-like MVC материал.

Некоторое время там я пытался выяснить, как структурировать эти "агенты", таким образом, что они могли ответить на свой окружающий контекст (что выбрано, и т.д.). Казалось, что все должно было знать обо всем остальном. И затем я читал о Таблице/Списке Пути/Навигации для игр и сразу думал, что у них есть централизованно сохраненная таблица всех предрасчетных мер, которые может принять каждый агент. Так, чтобы получил меня задающийся вопросом, как они на самом деле структурируют свой код.

Весь 3D материал видеоигры является большим секретом и большим количеством его от того, что я вижу, сделан с графическим UI/редактором, как определение деревьев поведения. Таким образом, я задаюсь вопросом, используют ли они своего рода MVC для структуры, как их агенты отвечают на среду, и как они сохраняют свой код модульным и инкапсулированным.

6
задан SashaZd 5 November 2019 в 18:54
поделиться

3 ответа

«Можете ли вы применять принципы из MVC для Принципы из искусственного Интеллект (поведение деревьев, Иерархические государственные машины, вложенные Государства), как игры? "

, конечно. 99,9% Ai чисто в модели. Контроллер отправляет в него входы, представление - это то, как вы представляете его на экране пользователю.

сейчас , Если вы хотите начать управление AI что-то контролировать, вы можете в конечном итоге вкладывать концепции, и ваша игра «Модель» содержит модель для объекта, контроллер для объекта, который является командам отправки AI и представление Для сущности представляют собой восприятие этого объекта, с которыми может работать контроллер. Но это отдельную проблему от того, может ли она «играть красиво». MVC - это отделение презентации и ввода от логики и состояния, и этот аспект не заботится о том, что Логика и состояние выглядит как.

2
ответ дан 17 December 2019 в 20:32
поделиться

Держите это в виду: Вещи, которые необходимо реагировать, просто нужно знать о вещах, к которым они должны реагировать. Поэтому, если им нужно знать обо всем, тогда им нужно знать обо всем. В противном случае, - вы делаете их в курсе? В 3D-видеоиграх вещами, скажем, с шумами первого лица, враги реагируют на звук и зрение (шаги / выстрелы и вы / мертвые тела, например). Обратите внимание, что я указал абстрактную основу и части дерева решений.

В вашем конкретном случае может быть неправильно, чтобы разделить все, что между несколькими агентами, и проще оставить его одному главному агенту, который может делегировать заказы на отдельных процессов (/ начать Beadble): каждый вид может быть процесс, который мог Считают переключиться на любой (ряд) представления основным агентом, в зависимости от того, какие данные главным агентом получил.

Надеюсь, что поможет .. Возьми все это с зерном соли :)

0
ответ дан 17 December 2019 в 20:32
поделиться

Похоже, вам нужно больше использовать паттерн Observer/Event Aggregator. Если несколько компонентов должны реагировать на произвольные события приложения без излишней связанности, то использование агрегатора событий поможет вам. Пример: когда элемент выбран, публикуется событие приложения, соответствующие контроллеры сообщают своему представлению о необходимости запустить анимацию и т.д. Различные компоненты не знают о других, они просто слушают общие события.

Кроме того, код, который заставляет представление делать что-то (запускать анимацию в зависимости от состояния модели/контроллера) - это часть самого представления, поэтому вам не нужно делать архитектуру странной, имея контроллер и контроллер представления. Если это код, специфичный для пользовательского интерфейса, то он является частью представления. Я не знаком с Flex, но в WPF/Silverlight такие вещи должны быть в code-behind (хотя по большей части Visual State Manager более чем достаточно для работы с анимацией состояния, так что вы можете держать все в XAML).

0
ответ дан 17 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: