Box2D打破MVC概念吗?

时间:2013-12-08 10:52:54

标签: model-view-controller box2d robotlegs puremvc

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

2 个答案:

答案 0 :(得分:3)

我觉得Box2D根本没有打破MVC的概念(只要我们在这里谈论模型 - 视图 - 控制器......我经常迷失在缩写海洋中;)。

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

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

它也有某种“AI代码”来决定施加多大的力,如何转动导弹等。这些或通常被称为“转向”力量。这是模拟的下一个层次,即“让事情发生变化”的一部分。

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

你可能会走得更高,但可以忽略的是,在任何时候我都没有提到导弹是如何展示或呈现给用户的。那就是观点。

所以,我接受了这一切:

模型(分层):

  1. PHYSICS
  2. MOVEMENT
  3. 逻辑和推理
  4. 总体模拟或策略
  5. 在任何一个中都没有提到的视图......无论它们是以2-D,3-D还是通过与花栗鼠相连的气球显示,它们都可以运行和存在。这些层可以相互作用......物理学检测到最终导致LOGIC AND REASONING层中状态发生变化的碰撞等。

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

    在“硬核定义”级别,用户使用控制器为模型提供输入。所以我触摸屏幕,导弹知道它应该朝哪里飞去。该模型获得了“去这里”的命令,导弹的AI接受了这个命令并“随之运行”。

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

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

    这有用吗?

答案 1 :(得分:1)

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

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

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

游戏中的MVC如下所示: enter image description here

Box2D将包含在游戏模型类中。您的渲染库(您还没有说过您正在编写的平台)将在您的View类中被包装。任何UI内容都会出现在您的控制器中。

如果您想了解更多关于how to use MVC for HTML5 Games using Box2DWeb (for physics) with EaselJS (view) in CoffeeScript, I've written more about it here的信息。