Lef*_*s E 6 model-view-controller design-patterns game-engine
阅读gamasutra上的artile让我想到如何将MVC游戏中的控制器设计为:
选项1:控制器应该对模型起作用,
例如:每按一次键,控制器调用模型:
On KeyPress Left
SuperMario.StartWalking(Left)
On KeyRelease -Left or Right-
SuperMario.StopWalking()
Run Code Online (Sandbox Code Playgroud)
选项2:模型向控制器查询要执行的操作
例如:每个更新刻度模型调用GetDesiredXSpeed():
On KeyPress Left
speedX = -SuperMario.MaxSpeed();
On KeyRelease -Left or Right-
speedX = 0;
int GetDesiredXSpeed()
return speedX;
Run Code Online (Sandbox Code Playgroud)
控制器的两种设计中的哪一种在能够改变控制器以支持替代输入方法(如操纵杆或鼠标,网络播放器甚至AI)方面提供了最大的好处?我应该为另一个人做什么呢.如果您在游戏设计方面有个人经验,请给我2美分.
Ale*_*eys 11
在http://www.koonsolo.com/news/model-view-controller-for-games/上有更多以游戏为重点的细分
基本思想是划分模型,通过视图渲染模型,以及模型的控制(由用户和/或其他实体).例如,您的模型代码 - 内部世界的表示,并不特别知道视图将如何显示它的方法.因此,可以在不触及任何核心模型代码的情况下交换整个图形引擎.控制器是代码中处理用户输入的部分,然后调用模型以使其执行某些操作.控制器代码也与模型代码完全分离,可以换出不同的控制设备而无需更改模型.
通常,人们试图将模型的函数调用最小化到其他任何东西.控制器通常使用模型的函数调用来更改它,并且视图使用不同的模型调用来访问构建模型(用户可见)表示所需的内容.
当一个人开始尝试在域对象和模型中的对象控制代码之间进行正式划分时,这会更加复杂,并且很难将一些代码专门放在模型中,在业务逻辑中(在正式化它的应用程序中) ),或在控制器代码中.但是,对于较小的游戏,这并不是那么重要.
对问题的简短回答是,通常模型不会查询控制器,也不会查看视图生成代码.