【发布时间】:2010-01-18 02:47:25
【问题描述】:
我来自 MVC 背景(Flex 和 Rails),喜欢代码分离、可重用性、封装等理念。它使快速构建事物和在其他项目中重用组件变得容易。但是,在尝试构建复杂的、状态驱动的、异步的、动画的应用程序时,很难坚持 MVC 原则。
我正在尝试create animated transitions between many nested views in an application,这让我开始思考我是否在误导自己……你能将 MVC 的原理应用于人工智能的原理吗(行为树、分层状态机、嵌套状态) ,比如游戏?这两个学科配合得好吗?
当事物是静态的(例如 HTML CMS 系统或其他)时,很容易让视图/图形对自身之外的任何事物一无所知。但是当您开始添加复杂的状态驱动转换时,似乎所有内容都需要了解其他所有内容,而 MVC 几乎会妨碍您。你怎么看?
更新:
一个例子。好吧,现在我正在使用 Flex 开发一个网站。我得出的结论是,为了正确地为应用程序中的每个嵌套元素设置动画,我必须将它们视为 AI 代理。然后,每个“视图”都有自己的行为树。也就是说,它根据上下文(选择的数据是什么等)执行动作(显示和隐藏自身)。为了做到这一点,我需要一个 ViewController 类型的东西,我称它为 Presenter。所以我有一个视图(以 MXML 布局的图形)、一个演示器(定义视图可以根据应用程序的状态和嵌套状态执行的动画和操作)和一个演示模型,用于将数据呈现给视图(通过主持人)。我还有用于值对象的模型和用于处理 URL 和数据库调用等的控制器……所有普通的静态/html 类 MVC 东西。
有一段时间,我试图弄清楚如何构建这些“代理”,以便它们可以响应周围的环境(选择什么等)。似乎一切都需要了解其他一切。然后我读到了游戏的路径/导航表/列表,并立即认为他们有一个集中存储的表,其中包含每个代理可以采取的所有预先计算的操作。所以这让我想知道他们实际上是如何构建代码的。
所有 3D 视频游戏的内容都是一个大秘密,据我所知,其中很多都是通过图形 UI/编辑器完成的,例如定义行为树。所以我想知道他们是否使用某种 MVC 来构建他们的代理如何响应环境,以及他们如何保持他们的代码模块化和封装。
【问题讨论】:
-
你能举一个很简单的例子吗?链接的问题也太长了。
-
您的问题似乎与黑板架构有关。
-
哦,那个黑板架构看起来很有趣!谢谢!
标签: ruby-on-rails model-view-controller artificial-intelligence state-machine behavior-tree