Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 游戏设计MVC-控制器架构_Design Patterns_Model View Controller_Game Engine - Fatal编程技术网

Design patterns 游戏设计MVC-控制器架构

Design patterns 游戏设计MVC-控制器架构,design-patterns,model-view-controller,game-engine,Design Patterns,Model View Controller,Game Engine,在阅读一篇文章时,我想到MVC游戏中的控制器应该如何设计为: 备选案文1: 控制器应作用于模型 例:只要按下一个键,控制器就会调用模型: On KeyPress Left SuperMario.StartWalking(Left) On KeyRelease -Left or Right- SuperMario.StopWalking() 选项2:模型询问控制器要做什么 例如:每个更新tick模型调用GetDesiredXSpeed(): 控制器的两种设计中,哪一种在改变控制器以支持其他

在阅读一篇文章时,我想到MVC游戏中的控制器应该如何设计为:

备选案文1: 控制器应作用于模型

例:只要按下一个键,控制器就会调用模型:

On KeyPress Left
 SuperMario.StartWalking(Left)

On KeyRelease -Left or Right-
 SuperMario.StopWalking()
选项2:模型询问控制器要做什么

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


控制器的两种设计中,哪一种在改变控制器以支持其他输入方法(如操纵杆或鼠标、网络播放器甚至AI)方面提供了最大的优势?我应该优先考虑什么。如果你在游戏设计方面有个人经验,请给我你的2美分。

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

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

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

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

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

On KeyRelease -Left or Right-
  speedX = 0;

int GetDesiredXSpeed()
    return speedX;