我已经开始为iphone编写一个游戏,作为所有初学者,我觉得我在黑暗中射击。我只想运行我的设计和我的“图形引擎”的工作方式,看看它是否接近标准设计或良好实践。让我解释一下它是如何工作的:
出于简化的原因,让我们简单地说,我有以下三个类:
LevelView:继承自UIViewController,是一个每个级别都有10个按钮的视图。单击一个按钮将创建一个新的GameViewController对象(使用initWithLevel),并根据玩家选择的级别使用整数( 1-10)实例化它。
GameViewController:继承了UIViewController,并具有initWithLevel( int )方法和一个大型开关语句,该语句根据所传递的int执行级别设置。因此,它实例化两种类型的物体(机器人和行星)在不同的数字,根据每个级别。它创建的每个对象都被插入到属于单个实例的数组中。最后,它将启动gameloop,这是该类中的另一个方法。
GameView:继承自UIView,是绘制所有东西的地方(有一个drawRect方法),以及触点开始、移动和结束方法的位置。每一个gameLoop都会发生什么,这将从全局数组(单例中的数组)中提取所有对象,并根据它是什么对象在正确的位置绘制正确的图像。(机器人和行星的位置作为变量存储在各自的物体中)
在开始的、移动的、结束的方法中,根据用户的操作,从Singleton数组中提取相关对象,并更新它们的位置/能力。因此,下一次循环运行并再次绘制它们时,绘制方法将更新它们的位置或行为。
这听起来就像现在这样吗?我应该实例化一个GameViewController对象来启动这个级别吗?gameLoop是在GameViewController中还是应该在GameView中。我已经将GameView添加到GameViewController in InterfaceBuilder中,它将绘制初始对象,但我不知道如何继续更新它们。如何调用drawRect方法来更新所有内容?
不管怎么说,很抱歉这么长的帖子。我并不是想找一个具体的答案,而只是找一个更有经验的人的评论来告诉我:
1)是的,你的设计方向是正确的
2)不,你需要重新考虑一些事情
谢谢你的帮忙
斯塔夫
发布于 2010-11-13 15:33:52
我真的建议使用一个好的游戏框架,如Cocos2d,而不是滚动它所有你自己。
它非常快,很容易与它一起滚动,很多顶级游戏都是用它制作的。
它甚至有“级别”的处理,就像你想要做的那样。
我下载了它,并在24分钟内启动并运行了我的第一个测试应用程序!
请到以下地点查看:
发布于 2010-11-13 17:33:06
我同意Cocos2d。另一方面,如果您对图形的工作方式感兴趣,那么就开始学习OpenGL ES,这很难学习,但是一旦您知道了它,您就不会像以前那样通过使用框架来完成所有的工作。
关于你的另一个问题,设计。应用程序建立在MVC模式之上。根据应用程序的规模,您可以将游戏循环(逻辑)放在控制器类中,或者对于更大的项目(以及更好的设计),我认为您应该将两者分开。
https://stackoverflow.com/questions/4175229
复制