6

阅读 gamasutra 上的一篇文章让我想到了 MVC 游戏中的控制器应该如何设计为:

选项1:控制器应该作用于模型,

例如:每当按下一个键控制器调用模型:

On KeyPress Left
 SuperMario.StartWalking(Left)

On KeyRelease -Left or Right-
 SuperMario.StopWalking()

选项 2:模型向控制器询问要做什么

例如:每个更新刻度模型调用 GetDesiredXSpeed():

On KeyPress Left
  speedX = -SuperMario.MaxSpeed();

On KeyRelease -Left or Right-
  speedX = 0;

int GetDesiredXSpeed()
    return speedX;

控制器的两种设计中的哪一种在能够更改控制器以支持替代输入方法(例如,操纵杆或鼠标、网络播放器甚至人工智能)方面提供最大的好处?我应该比另一个更喜欢什么。如果你在游戏设计方面有个人经验,请给我你的 2 美分。

4

1 回答 1

11

http://www.koonsolo.com/news/model-view-controller-for-games/上有更多以游戏为重点的细分

基本思想是划分模型、模型的渲染由视图和模型的控制(由用户和/或其他实体)。例如,这意味着您的模型代码(内部世界的表示)并不具体知道视图将如何显示它。因此,整个图形引擎可以在不触及任何核心模型代码的情况下被换掉。控制器是处理用户输入的代码部分,然后调用模型使其执行某些操作。控制器代码也与型号代码完全分离,无需更改型号即可更换为不同的控制设备。

通常,人们试图将模型对其他任何东西的函数调用最小化。控制器通常使用模型的函数调用来更改它,视图使用不同的模型调用来访问构建模型(用户可见)表示所需的内容。

当人们开始尝试在模型中的域对象和对象控制代码之间进行正式划分时,这会变得更加复杂,并且很难将一些代码专门放在模型中,业务逻辑中(在将其形式化的应用程序中) ),或在控制器代码中。但是,对于较小的游戏,这并不重要。

对这个问题的简短回答是,通常模型不会查询控制器,也不会查询视图生成代码。

于 2013-05-19T15:13:26.190 回答