2013-05-19 134 views
4

gamasutra读取一个artile迫使我思考的是如何应在MVC游戏控制器被设计为:游戏设计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; 

这两种设计的控制器是能够改变控制器来替代输入法支持,例如,操纵杆或术语提供了最大的利益的鼠标,网络播放器甚至AI?我应该对另一方说什么。如果你在游戏设计方面有个人经验,请给我2分钱。

回答

9

有在http://www.koonsolo.com/news/model-view-controller-for-games/

更游戏聚焦击穿的基本思想是瓜分模型,由视图模型的渲染,并且该模型的控制(由用户和/或其它实体)。举例来说,这意味着你的模型代码 - 内部世界的表示,并不具体知道它将如何被视图显示出来。因此,整个图形引擎可以在不触及任何核心模型代码的情况下被换出。控制器是处理用户输入的代码的一部分,然后调用模型使其执行某些操作。控制器代码也与型号代码完全分开,可以换出不同的控制设备,而无需更改模型。

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

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

问题的简短答案是,通常模型不会查询控制器,也不会查看生成代码。