模型-视图-控制器在人工智能和行为树上玩的很好吗?

问题描述 投票:6回答:3

我来自MVC背景(Flex和Rails),并且喜欢代码分离,可重用性,封装等思想。它使快速构建事物和在其他项目中重用组件变得容易。但是,在尝试构建复杂的,状态驱动的,异步的,有动画效果的应用程序时,很难遵循MVC原则。

[我正在尝试create animated transitions between many nested views in an application,这让我开始思考是否在误导自己...您能将MVC中的原理应用于人工智能中的原理(行为树,分层状态机,嵌套状态),喜欢游戏吗?这两个学科在一起玩的很好吗?

当事物是静态的时,例如使用HTML CMS系统或类似工具,很容易使视图/图形不了解其外部的任何事物。但是,当您开始添加复杂的,由状态驱动的转换时,似乎所有事情都需要了解其他所有内容,而MVC几乎会妨碍您的工作。您怎么看?

更新:

一个例子。好吧,现在我正在Flex网站上工作。我得出的结论是,为了正确地对应用程序中的每个嵌套元素进行动画处理,我必须将它们视为AI代理。每个“视图”都有自己的行为树。也就是说,它基于context(所选数据是什么,等等)执行action(显示和隐藏自身)。为了做到这一点,我需要一个ViewController类型的东西,我称它为Presenter。因此,我有一个View(以MXML布局的图形),一个Presenter(根据应用程序的状态和嵌套状态定义View可以执行的动画和动作),以及一个Presentation Model,用于将数据呈现给View(通过演示者)。我也有用于值对象的模型和用于处理URL和数据库调用等的控制器...所有常规的类似于static / html的MVC素材。

有一阵子,我试图弄清楚如何构造这些“代理”,以便它们可以响应周围的环境(选择了什么,等等)。似乎所有事情都需要意识到其他所有事情。然后,我了解了游戏的路径/导航表/列表,立即想到它们具有一个集中存储的表,其中包含每个特工可以执行的所有预先计算的动作。所以这让我想知道他们如何实际构造代码。

所有3D视频游戏的东西都是一个大秘密,从我看来,很多都是通过图形UI /编辑器完成的,例如定义行为树。因此,我想知道他们是否使用某种MVC来构建其代理如何响应环境以及如何保持其代码模块化和封装的结构。

ruby-on-rails model-view-controller artificial-intelligence state-machine behavior-tree
3个回答
2
投票

“您可以将MVC中的原则应用于人工原理情报(行为树,分层状态机,嵌套状态),例如游戏?“

当然。 99.9%的AI完全在模型中。控制器将输入发送给它,视图就是您在屏幕上向用户表示的方式。

现在,如果您想开始让AI控制某些东西,您可能最终会嵌套这些概念,并且您的游戏“模型”包含一个实体的模型,一个实体的控制器,即AI向其发送命令的实体,实体的视图,表示控制器可以使用的对该实体的看法。但这是一个单独的问题,它是否可以“很好地播放”。 MVC是关于将表示和输入与逻辑和状态分离的,而该方面并不关心逻辑和状态是什么样。


0
投票

记住这一点:需要做出反应的事情只需要知道他们需要做出反应的事情即可。因此,如果他们需要了解所有事情,那么他们就需要了解所有事情。否则,-您如何使他们知道?例如第一人称射击游戏,在3D视频游戏中,敌人会对声音和视力做出反应(例如,脚步声/枪声以及您/尸体)。注意,我指出了一个抽象的基础,以及决策树的一部分。

在您的特定情况下,将整个事物分开在多个业务代表之间,并且将其交给一个可以委托将订单委托给单独的流程的主要业务代表更简单(/开始胡言乱语:每个视图可能是一个流程,指示主代理根据任何主要数据已接收到的数据切换到任何(许多)视图。

希望有帮助。用一点盐把它全部拿走:)


0
投票

听起来您需要更多地使用Observer / Event Aggregator模式。如果多个组件需要对任意应用程序事件做出反应而不引入不适当的耦合,那么使用事件聚合器将为您提供帮助。例如:当选择一个项目时,将发布一个应用程序事件,相关的控制器告诉其视图运行动画等。不同的组件不了解其他组件,它们只是侦听常见事件。

而且,使视图执行操作的代码(根据模型/控制器状态启动动画)-这是视图本身的一部分,因此,不必通过拥有控制器和视图控制器来使体系结构怪异。如果它是特定于UI的代码,则它是视图的一部分。我不熟悉Flex,但是在WPF / Silverlight中,类似的内容会被隐藏在代码中(尽管大多数情况下Visual State Manager足以处理状态动画,因此您可以将所有内容保留在XAML中) 。

© www.soinside.com 2019 - 2024. All rights reserved.