陈亦飞主演的电视剧:iPhone cocos2d游戏开发-1

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 22:19:28

开发iPhone游戏是一个很有趣的领域,这个系列文章记录了山寨Flight-Control这个游戏的全过程。

Flight-Control是个很不错的小游戏,个人比较喜欢这种类型。所以就选择了Flight-Control作为学习样版。这个山寨版本会尽量模仿原版Flight-Control的功能。

声明:本文附带的源代码可以用于任何目的。

概述

Flight-Control应该归为划线类游戏。游戏进行时,会从屏幕周围随机出现一些飞机。玩家需要通过点击飞机并划线来控制这些飞机的飞行轨迹。最终目标是让飞机在机场着陆。游戏里面有不同类型的飞机,这些飞机的外观、飞行速度和能够降落的机场都有所不同。

附原版截图(来自Flight-Control官方网站 http://firemint.com/?page_id=567):

开发准备

在开发这个山寨版时,我使用以下的环境和开发工具:

  • Snow Leopard操作系统
  • iPhone SDK 3.2(包含了XCode 3.2.2)
  • Flash CS5:用于制作一些游戏里面的动画
  • Photoshop CS5:用于一些素材的处理
  • cocos2d 0.99.3:一个出色的iPhone 2D游戏引擎
  • Zwoptex:用于将多个png图片合并为一个png,便于cocos2d载入

由于游戏基于cocos2d开发,所以在装好iPhone SDK后还要再安装cocos2d,具体的步骤参考cocos2d的Readme文件。

决定游戏的结构

虽然我们是山寨别人的游戏,不用考虑创意什么的。但在编写代码前,还是需要做一些文档工作,将整个游戏的结构确定下来。

上面的流程图反映了游戏各个片段之间的关系。利用cocos2d中的场景概念,我们可以很方便的将各个片段封装为独立的对象。

PS: 流程图里面没有退出。因为iPhone应用在用户按下手机上的Home键时,会收到一个退出消息。应用程序应该在这里处理退出时的操作。

cocos2d基本概念

既然要用cocos2d,有些基本概念还是得弄清楚。以下内容参考了cocos2d的文档,并加入了我自己的理解和补充。

场景(Scene)和层(Layer)

游戏总是分成不同的片段,例如开场动画、游戏菜单、第一个关卡、结束画面等。将每一个片段封装为独立的场景,可以让游戏的整体结构更清晰,降低开发和维护成本。

在cocos2d中,场景由CCScene的继承类进行封装。场景通常不包含游戏逻辑,仅仅是做为一个容器,将不同的层组合到一起,最终呈现给玩家一个完整的画面。而层是更小一级的容器,包含了一定的游戏逻辑和需要呈现的精灵(Sprite)。

如果使用过Photoshop软件,就会发现cocos2d的层和Photoshop中的层概念几乎一样:

上图是一个由三个层组成的场景。由于在cocos2d中层的背景默认是透明的(上图中为了表示不同层用了半透明色彩),所以上面层的空白区域会透出下面层的内容。最终的结果如下图:

不同的层除了分割图像的表示,还对游戏逻辑进行了分割。例如上图中,云层和城市建筑两个层只需要做横向卷动就可以了。而包含精灵的层则需要对玩家的操作做出响应。

虽然从表面上看,场景和层没有太大区别。但是在开发时,明确的区分场景和层可以帮助我们实现更好的游戏内部结构。

而且在cocos2d中,CCScene和CCLayer还是存在一些显著的差异。CCScene仅仅是CCNode的继承类,而CCLayer则在CCNode的基础上添加了对多点触摸和加速计的支持。

精灵(Sprite)

精灵是一个呈现在屏幕上的图像,例如一朵云彩、一栋房屋、一个五角星。cocos2d提供了CCSprite类用于封装精灵。CCSprite可以完成图像显示、旋转、缩放、透明度设定、关键帧动画等功能。

光是显示图像还不够,精灵总是有自己的行为。一个跳动的小球、一个飞舞的蝴蝶,这些精灵的行为由开发者在CCSprite的继承类中实现。因此,一个CCSprite继承类不但封装了精灵的显示,还包含了精灵的逻辑。

对于一些常见的行为,cocos2d提供了CCAction系列类来简化开发。例如CCMoveTo可以控制精灵的移动,而CCJumpTo则实现了简单的跳跃效果。

导演(Director)

CCDirector用于控制场景的切换。例如开场画面结束后,就切换到游戏菜单场景。或者在关卡通过后切换到得分显示场景。

cocos2d概念总结

总结而言,开发者按照下面的模式来开发游戏:

  • 用CCScene和CCLayer来组织游戏
  • 在CCLayer的继承类中封装场景中的逻辑
  • 用CCSprite来封装精灵的图像及其逻辑
  • 用CCDriector控制游戏的流程

下一篇文章开始,我们将进入实际的编码。