如何在MVC 2D游戏中处理对象的图形表示?

tob*_*bes 8 java model-view-controller

我正在使用MVC模式在java中制作2D游戏,在阅读并搜索我的屁股之后,我仍然没有找到令人满意的安装,我应该如何处理对象的图形表示.

我应该将每个对象,例如Player分为PlayerModel(存储在Model中)和PlayerView(存储在View中)吗?

那似乎有点混乱,因为我必须跟踪哪个grapical-representation-object,即"ScaryMonsterEnemyView"连接到哪个逻辑表示对象,"ScaryMonsterEnemyModel".根据MVC,这真的是我应该怎么做的吗?如果是这样,这个连接应该存储在哪里?在视图中?

我知道这可能是一个愚蠢的问题,但我想从一开始就尽可能多地获得.谢谢你的帮忙:)

Zis*_*ack 4

如果我没记错的话,您基本上是在问如何将游戏拆分为模型-视图-控制器范例。

简而言之,模型就是游戏的状态。在面向对象的术语中,您可以将模型视为游戏中的所有对象。

控制器是在每个更新周期中应用于游戏状态(在本例中为所有游戏对象)的一组规则。这可以在所有对象中实现为名为 update() 的方法,也可以是在游戏循环中调用的函数,系统地遍历所有需要更新的对象,然后更新它们。您还可以将控制器视为游戏循环本身。它调用所有内容进行更新,然后将其绘制在屏幕上并重复,除非满足某些条件,然后它告诉程序执行其他操作。这样,您几乎就有了两个嵌套的 MVC 结构。一种通过菜单等控制程序的流程,另一种专用于游戏本身。

视图只是游戏的图形表示。这可以像屏幕上的文本一样简单,但在您的情况下它是 2D 图形。为了实现这一点,您可以让每个对象也直接或通过封装包含其图形状态。视图只会查询所有对象的图形状态,然后将其分流到屏幕。同样,这可以在每个对象的基础上实现,例如称为draw()的方法,或直接从游戏循环调用的另一个系统函数。常见的做法是创建一个名为“Sptite”的对象或类似的对象来保存图形信息,并使绘制的每个游戏对象都有一个个人实例。另请注意,视图本身不必是一个对象。仅仅在游戏循环中调用一个函数就足够了,尽管有时需要存储直接影响视图操作的信息(如窗口大小),在这种情况下视图可以是一个对象。对于控制器来说也是如此。

还要记住,这些划分可以进一步细分,以使生活更简单。例如:控制器可以分为AI处理、动作更新、碰撞检查。View 可以分为游戏对象显示和 HUD,而 Model 可以是所有对象+所有独立于游戏对象的状态(例如分辨率、窗口大小、按键配置等游戏设置)。

我知道这可能有点矫枉过正,并且它可能包含额外的信息,但希望它能回答您的问题并为您提供从哪里开始的想法。