游戏设计MVC - 控制器架构

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;

这段文字的意思是:在控制器的两种设计中,哪一种提供了更多的好处,以便能够更改控制器以支持替代输入方法,例如操纵杆或鼠标、网络玩家甚至人工智能?我应该选择哪一个?如果您在游戏设计方面有个人经验,请给我您的建议。
1个回答

11

更多针对游戏的细节可以在http://www.koonsolo.com/news/model-view-controller-for-games/找到。

基本思想是将模型、视图中的模型呈现和模型的控制(由用户和/或其他实体控制)分开。例如,你的模型代码-内部世界的表示,不会特别知道它将如何被视图显示。因此,整个图形引擎可以在不触及任何核心模型代码的情况下进行替换。控制器是处理用户输入并调用模型使其执行某些操作的代码部分。控制器代码也与模型代码相当彻底地分开,可以为不同的控制设备更换控制器而无需改变模型。

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

当一个人开始尝试在模型中建立域对象和对象控制代码之间的正式分割时,这就变得更加复杂了,有时很难把一些代码明确放置在模型、业务逻辑(在形式化的应用程序中)或控制器代码中。不过,对于较小的游戏来说,这不是很关键。

简短回答是,通常模型不会查询控制器或视图生成代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接