2011-05-16 32 views
3

为了给出关于游戏的一些背景知识:坠落的物品从顶部浮动,其目的是轻弹/滑动另一个物体来击打它们。如果一件物品击中地面,你会失去生命并获得击落物品的积分。哪种设计模式可用于2D iPhone游戏?

这里是我有点困惑。在O'Reilly的iPhone游戏开发中。他们声明AppDelegate继承了一个游戏状态机对象,并且在App Delegate中拥有主游戏循环。没有关于MVC。

我打算使用MVC。我拥有为模型标识的所有对象,并且将使用一个控制器来更新每个模型及其相应的视图。然后在App Delegate中有一个导航控制器,并从主屏幕中推送某些控制器(播放,指令,统计)。然后让游戏循环在我的gameViewController中运行。顺便提一下,我使用Chipmunk作为物理引擎。

这是我的第一场比赛,所以我有点困惑。我将不胜感激任何有关如何着手的建议。我希望在跳入代码之前从一开始就获得面向对象的设计。

回答

7

我不认为MVC真的是你想要的。 MVC可以适用于您的整体应用程序状态 - 例如菜单视图,游戏板视图等。它在游戏中并不适合 - 至少只是想到了我的头顶。

看看gameDev上的这篇文章。从人的有用的模式很多关于这个聪明比我

https://gamedev.stackexchange.com/questions/4157/what-are-some-programming-design-patterns-that-are-useful-in-game-development

+0

尼斯链接,一些非常好的信息。 – TurqMage 2011-05-16 21:45:28

+0

谢谢 - 非常有用的线程。 – 2011-05-17 08:20:02

0

难道你不认为那场比赛状态机是一种数据模型?我没有你提到的O'Reilly书,但是你给我的描述非常像MVC。

MVC的主要观点是将应用程序的内容与内容在屏幕上表示的方式分开。 MVC中的“模型”不必包含从文件或Web服务器读取的哑数据对象......它可能很容易就是仿真,与其他设备的连接等。我认为其中的一点是,如果您要抛出应用程序的GUI并将其替换为脚本,命令行界面或Web服务,那么该模型就是您要保留的部分。游戏状态机当然可以符合这个描述。

在iOS应用程序中让应用程序委托实例化模型并不罕见。然后,您有视图控制器知道如何与模型交谈,并将其提供的数据转换为可以在视图中显示的内容。如果模型提供的某些数据是纹理或网格等图形元素,那没关系......毕竟这些是游戏运行的数据。

1

我的MVC进行如下操作。每个创建的游戏对象只是一个模型。没有附加逻辑的空数据。当对象被创建时,它也会附加一个Brain或者控制器。每个创建的Brain都添加到Brain列表中。大脑列表更新每个大脑,大脑改变模型。

要在屏幕上显示某些内容,Brain将模型添加到场景中。场景保留了它正在渲染的所有模型的列表。场景也从游戏循环更新。场景每次更新都会查看每个模型,任何没有查看的模型都会被赋予一个视图(根据模型中的数据创建一个新视图)。场景然后跟踪视图,直到模型的数据表明它不再需要它。

当我在iPhone上工作时,我喜欢将游戏循环切换到自己的线程上。O'Reilly的那些人非常聪明,尽管如此,我只能说一口盐。

[NSThread detachNewThreadSelector:@selector(GameLoop:) toTarget:self withObject:nil]; 

然后游戏循环本身首先更新大脑(或“控制器列表”),然后是场景(或“视图列表”)。

把它连接在一起的最后一块是输入。对于iPhone,我使用全屏视图。在touchesBegan和touchesEnd的视图中,我生成了传递给InputManager的事件。 InputManager将根据需要将事件发送到不同的模型。