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
Iphone游戏开发-需要设计指导_Iphone_Design Patterns - Fatal编程技术网

Iphone游戏开发-需要设计指导

Iphone游戏开发-需要设计指导,iphone,design-patterns,Iphone,Design Patterns,我已经开始为iphone编写一个游戏,作为所有的初学者,我感觉自己就像是在黑暗中拍摄。我只想运行我的设计,看看我的“图形引擎”是如何工作的,看看它是否接近标准设计或良好实践。让我解释一下它是如何工作的: 为了简化起见,让我们假设我有以下3个类: LevelView:继承自UIViewController,是一个每个游戏关卡都有10个按钮的视图。单击按钮创建一个新的GameViewController对象(使用initWithLevel),并根据玩家选择的级别使用整数(1-10)实例化它 Game

我已经开始为iphone编写一个游戏,作为所有的初学者,我感觉自己就像是在黑暗中拍摄。我只想运行我的设计,看看我的“图形引擎”是如何工作的,看看它是否接近标准设计或良好实践。让我解释一下它是如何工作的:

为了简化起见,让我们假设我有以下3个类:

LevelView:继承自UIViewController,是一个每个游戏关卡都有10个按钮的视图。单击按钮创建一个新的GameViewController对象(使用initWithLevel),并根据玩家选择的级别使用整数(1-10)实例化它

GameViewController:继承自UIViewController,具有initWithLevel(int)方法和一个大开关语句,该语句根据传递的int执行级别设置。因此,它根据每个级别以不同的数量实例化了两种类型的对象(机器人和行星)。它创建的每个对象都被插入到属于单个对象的数组中。最后,它将启动gameloop,这是这个类中的另一个方法

GameView:继承UIView,是绘制所有内容的地方(有一个drawRect方法),以及触摸开始、移动和结束方法的地方。每个gameLoop将发生的是,这将从全局数组(单例中的数组)中提取所有对象,并根据它是什么对象,在正确的位置绘制正确的图像。(机器人和行星的位置作为变量存储在各自的对象中)

在触碰开始、移动、结束方法中,根据用户所做的操作,将相关对象从单例数组中拉回来,并更新其位置/能力。因此,下次循环运行并再次绘制时,绘制方法将更新其位置或行为

这听起来对吗?我应该实例化GameViewController对象来启动该级别吗?gameLoop应该在GameViewController中还是在GameView中。我已经将GameView添加到InterfaceBuilder中的GameViewController中,它将绘制初始对象,但我不确定今后如何更新它们。如何调用drawRect方法来更新所有内容

不管怎样,很抱歉这篇文章太长了。我不是在寻找一个具体的答案,只是想找一个在这方面更有经验的人来告诉我:

1) 是的,从设计角度看,你正朝着正确的方向前进

2) 不,你需要重新考虑一些事情

谢谢你的帮助


Stav

我真的非常推荐使用一个好的游戏框架,比如Cocos2d,而不是你自己的

它的速度非常快,很容易适应,很多顶级游戏都是用它制作的

它甚至有处理“水平”,就像你正在尝试做的

我下载了它,并在24分钟内启动并运行了我的第一个测试应用程序

请访问:


我同意Cocos2d。另一方面,如果你对图形如何工作感兴趣,开始学习OpenGL ES,这很难学习,但一旦你知道了,你就不再像以前那样受限于使用完成所有工作的框架


关于你的另一个问题,设计。应用程序基于MVC模型构建。根据应用程序的规模,您可以将游戏循环(逻辑)放在控制器类中,或者对于更大的项目(以及更好的设计),我认为您应该将2个分开。

感谢alJaree的评论。还有一个问题,将我的游戏对象放在一个单例中,并以这种方式在类之间传输它们,这是一种好的设计吗?还有别的办法吗?我查看了Cocos2d,它看起来很容易使用一个功能强大的工具来满足我的需要。我可以换成那个。当然可以。单身汉应该做到这一点。看看这篇文章。作者使用cocos2d并讨论了singleton类。谢谢我开始将所有菜单结构转换为场景,并在cocos2d中实现所有基本功能。在那之后,整个图形引擎部分应该很容易!干杯我查过了。看起来足够强大的我正在做的事情和相当容易!我想我可能会把我的整个应用程序切换到那个!谢谢你的评论。我正在切换到CoCo2D,因为它看起来比我以前使用的核心框架更简单、更快。干杯