今天带来的是一个IOS上的飞行射击游戏,通过整个开发过程,帮助和我一样的新手初步了解Cocos2d游戏开发的一些基础知识以及开发流程,熟悉开发过程中使用到的各种工具。由于刚刚接触IOS开发不到3个月时间,有不对的地方或者代码有不完善的,或者有哪些地方写的不明确的,欢迎留言批评指正^0^。
废话不多说,首先上几张截图,看一下游戏最终的大致运行效果:
游戏开始界面(难度选择):
游戏界面:
游戏结束:
开发使用的工具是Xcode 5.1,在IPad316G进行测试。Cocos2d版本为2.0。完成这个教程需要了解Object-C语言的基本语法,熟悉Xcode的使用。
在规划游戏的时候,我们把游戏分成若干个场景,在Cocos2d中,一个场景是一个CCScene对象,场景中包含了一个或多个层(CCLayer),每个层上放置各种各样的元素。任何一个时刻,只有一个场景呈现给用户。
上面看到的三个截图代表了游戏的三个场景,StartScene,GameScene和GameOverScene,我们省略掉了一个LoadingScene的截图,这个LoadingScene用来过渡StartScene和GameScene的转换过程,防止在切换到GameScene时,由于加载资源较多导致切换场景时间过长,程序界面卡主。
先跳过StartScene和GameOverScene,我们首先来制作GameScene:
在界面上我们看到GameScene的一些组成元素:背景(背景是动态背景,截图没有体现),玩家飞船,敌人飞船,子弹,摇杆和按钮,当前分数和最高分,看不到的一些元素有音效(背景音效和射击音效),爆炸的粒子特效。
下面我们开始制作,首先创建一个Cocos2d的工程:
起名DarkTravel(名字随便起,喜欢叫什么都行),设备类型(DeviceFamily)选择IPad。
创建完工程后,删除工程中默认创建出来的HelloWorldLayer.h,HelloWorldLayer.m,IntroLayer.h,IntroLayer.m这四个文件,我们即将创建我们自己的Layer和Scene:
删除后,按Cmd+N键创建一个类:
取名叫GameLayer,继承CCLayer(你可能要问,之前不是说好的Scene么,怎么变成Layer了?!稍后我会有解释):
创建好之后,我们修改AppDelegate.m文件中的代码,代码中原来引用IntroLayer.h,我们将其替换为我们的GameLayer.h:
并且在下面的方法中,将IntroLayer替换为GameLayer:
至此,游戏在运行的时候,默认显示的就是我们自己的GameScene了。
然而我们此时仍然无法编译通过,编译器提示我们GameLayer没有实现静态方法“scene”。在GameLayer.h中加入静态方法声明:
+ (id)scene;
然后在GameScene.m中添加相应的实现方法:
+ (id)scene {
CCScene* scene = [CCScenenode];
GameLayer* gameLayer =[[GameLayer alloc] autorelease];
[scene addChild:gameLayer];
return scene;
}
编译通过。
这里做一下解释,之所以我们创建继承自CCLayer的GameLayer,再创建一个类方法返回一个包含GameLayer的CCScene对象,是因为大多数情况下CCScene对象里面不包含任何游戏元素对象,并且很少需要继承扩展,因此常见的方式是创建CCLayer子类对象,添加类方法创建并返回包含这个Layer的CCScene对象。
在AppDelegate中修改的那段代码,就是让director运行我们的GameScene。
好了,下一篇我们就开始一个一个地制作我们前面提到的GameScene中的各个元素了。