Ruby on rails 模型视图控制器与人工智能和行为树配合得好吗?

Ruby on rails 模型视图控制器与人工智能和行为树配合得好吗?,ruby-on-rails,model-view-controller,artificial-intelligence,state-machine,behavior-tree,Ruby On Rails,Model View Controller,Artificial Intelligence,State Machine,Behavior Tree,我来自MVC背景(Flex和Rails),喜欢代码分离、可重用性、封装等概念。它使快速构建东西和在其他项目中重用组件变得容易。然而,在尝试构建复杂的、状态驱动的、异步的、动态的应用程序时,很难坚持MVC原则 我正在尝试,这让我思考我是否在误导自己。。。你能将MVC的原则应用到人工智能(行为树、层次状态机、嵌套状态)的原则,比如游戏吗?这两个学科配合得好吗 当事物是静态的时,很容易让视图/图形忽略自身之外的任何事物,比如HTMLCMS系统或任何东西。但是,当您开始添加复杂的状态驱动的转换时,似乎所

我来自MVC背景(Flex和Rails),喜欢代码分离、可重用性、封装等概念。它使快速构建东西和在其他项目中重用组件变得容易。然而,在尝试构建复杂的、状态驱动的、异步的、动态的应用程序时,很难坚持MVC原则

我正在尝试,这让我思考我是否在误导自己。。。你能将MVC的原则应用到人工智能(行为树、层次状态机、嵌套状态)的原则,比如游戏吗?这两个学科配合得好吗

当事物是静态的时,很容易让视图/图形忽略自身之外的任何事物,比如HTMLCMS系统或任何东西。但是,当您开始添加复杂的状态驱动的转换时,似乎所有的事情都需要了解其他的事情,而MVC几乎成为了阻碍。你觉得怎么样

更新:

举个例子。现在我正在Flex中开发一个网站。我得出的结论是,为了正确地设置应用程序中每个嵌套元素的动画,我必须将它们视为AI代理。因此,每个“视图”都有自己的行为树。也就是说,它根据上下文(所选数据的内容等)执行操作(显示和隐藏自身)。为了做到这一点,我需要一个ViewController类型的东西,我称之为Presenter。因此,我有一个视图(MXML中的图形)、一个演示器(根据应用程序的状态和嵌套状态定义视图可以执行的动画和操作)和一个演示模型(通过演示器)将数据呈现给视图。我也有值对象的模型和处理URL和数据库调用等的控制器。。。所有普通的静态/html类MVC的东西

有一段时间,我试图弄清楚如何构造这些“代理”,使它们能够响应周围的环境(选择什么,等等)。似乎一切都需要意识到其他一切。然后我读到一个游戏的路径/导航表/列表,立刻想到它们有一个集中存储的表,其中包含了每个代理可以执行的所有预先计算的操作。所以我想知道他们实际上是如何构造代码的

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

请记住: 需要作出反应的事物只需要知道它们需要作出反应的事物。 因此,如果他们需要了解一切,那么他们需要了解一切。 否则,你如何让他们知道?在3D视频游戏中,比如说第一人称射击游戏,敌人会对声音和视觉做出反应(比如脚步声/枪声和你/尸体)。注意,我指出了一个抽象的基础和决策树的一部分

在您的特定情况下,在多个代理之间分离整个过程可能是错误的,更简单的做法是让一个主代理将订单委托给单独的流程(/begin babble):每个视图都可以是一个流程,主代理可以告诉它切换到任何(多个)视图,取决于主代理收到的数据

希望对你有帮助。。一言为定:)

“您能否将MVC的原则应用到 人工智能原理 智力(行为树, 分层状态机,嵌套 国家),比如游戏?”

当然。99.9%的人工智能完全在模型中。控制器向其发送输入,视图是您在屏幕上向用户表示它的方式


现在,如果你想让AI控制一些东西,你可能会嵌套这些概念,你的游戏“模型”包含一个实体模型,一个实体控制器,它是AI向它发送命令的实体,以及一个实体视图,它表示控制器可以处理的实体的感知。但这与它是否能“玩得很好”是一个独立的问题。MVC是关于将表示和输入与逻辑和状态分开的,这方面并不关心逻辑和状态是什么样子。

听起来您需要更多地使用观察者/事件聚合器模式。如果多个组件需要对任意应用程序事件做出反应而不引入不适当的耦合,那么使用事件聚合器将有助于您解决问题。示例:选择某个项目时,会发布应用程序事件,相关控制器会通知其视图运行动画等。不同的组件不知道其他组件,它们只会侦听常见事件


此外,使视图执行操作的代码(根据模型/控制器状态启动动画)-这是视图本身的一部分,因此您不必通过使用控制器和viewcontroller使架构变得怪异。如果它是特定于UI的代码,那么它就是视图的一部分。我不熟悉Flex,但在WPF/Silverlight中,类似的东西会被放在后面的代码中(尽管在大多数情况下,visualstatemanager足以处理状态动画,因此可以将所有内容都保存在XAML中)

你能举个简单的例子吗?链接的问题也太长了。你的问题似乎与黑板结构有关。哦,那个黑板结构看起来很有趣!谢谢谢谢你听起来好像知道这一切的来龙去脉,你有什么资源可以指点吗?有任何源代码吗???没有,游戏开发者通常不使用MVC,所以在实践中你不会发现很多。但我只是建议不要把MVC看得太远。它被明确地设计用于将演示文稿与中的内容分离