0

Box2D 为游戏推荐了一个物理引擎,它结合了模型和视图。现在我想使用 MVC 设计模式或基于 MVC 设计模式的框架,例如 PureMVC 的 Robotlegs 来创建游戏。如果我选择 Box2D,Box2D 是否真的打破了 MVC 概念?如果这是真的,我应该担心吗?

4

2 回答 2

3

我不觉得 Box2D 完全打破了 MVC 概念(只要我们在这里谈论模型-视图-控制器......我经常迷失在首字母缩写词海洋中;)。

物理是模型的一部分。不是整个模型。

考虑在二维地形上飞行的导弹的模拟(例如这个)。“导弹”有一个如何移动的模型。其中一部分是质量、惯性矩、速度等。这是模拟的物理部分。

它还有某种“人工智能代码”来决定施加多大的力、如何转动导弹等。这些或通常称为“转向”力。这是模拟的下一个级别,它的“让事物移动”部分。

该模型还有一个较大的部分,即决定当导弹击中某物时要做什么的部分(它从物理学中获得)。或者首先什么时候发射导弹。或者导弹应该走的路线。

您可能会走得更高,但要摆脱这一点的是,我从来没有提到导弹是如何显示或呈现给用户的。那将是视图。

所以,我对这一切的看法:

模型(分层):

  1. 物理
  2. 移动
  3. 逻辑与推理
  4. 整体模拟或策略

这些中的任何一点都没有提到视图……无论它们是以 2-​​D、3-D 显示还是通过绑在花栗鼠上的气球显示,它们都在运行和存在。这些层可以相互交互......物理检测到最终导致逻辑和推理层中状态变化等的碰撞。

为了完整起见,控制器将用户带入其中。用户“使用”控制器来操纵模型。我一直觉得这有点难以思考;我喜欢具体的例子。

在“硬核定义”层面,用户使用控制器为模型提供输入。所以我触摸屏幕,导弹就知道它应该飞向哪里。模型得到“到这里”的命令,导弹的人工智能接受这个命令并“跟着它跑”。

另一方面,用户也可以使用控制器来操作视图(这不是“硬核 mvc”定义的一部分。考虑一个平板电脑应用程序,其中捏一下会改变视口,但轻击会发出导弹攻击的信号“这个目标”。第一个改变了视图,而第二个改变了模型。 注意:这种情况可能是从 MVC 派生的更现代形式的模式的表现,而不是纯粹的 MVC。

无论如何,物理是模型的一部分,而不是整个模型。

这个有帮助吗?

于 2013-12-08T13:00:28.947 回答
1

不,Box2D 破坏 MVC是不正确的。Box2D 没有将模型和视图结合起来,实际上恰恰相反。Box2D完全不知道您选择渲染视图的内容,因此它与 MVC 架构高度兼容。

在考虑 MVC 时,游戏在概念上很棘手,因为该模型与视图有许多相似之处(与业务应用程序不同)。但是,您仍然可以从架构中分离关注点中获得很多好处。

正如 Fuzzy 所说,Box2D 是游戏模型的一部分。

游戏中的 MVC 如下所示: 在此处输入图像描述

Box2D 将包含在游戏模型类中。你的渲染库(你还没有说你正在为哪个平台编写)将被包装在你的 View 类中。任何 UI 的东西都在你的控制器中。

如果您想了解更多关于如何在 CoffeeScript 中使用 Box2DWeb(用于物理)和 EaselJS(视图)将 MVC 用于 HTML5 游戏,我在这里写了更多关于它的内容

于 2014-09-09T07:57:18.927 回答