iOS开发,分享一个使用CADisplayLink实现的仿微信飞机大战示例程序OC版

前言

分享:心诚求之,虽上中,上远矣,未有学养子而后嫁者也。

时钟动画:
又称逐帧动画,开发者需要逐帧计算每次屏幕刷新时的图像位置,相对性能较低,但是能够精确控制。iOS开发中时钟动画实现通常使用CADisplayLink。本飞机大战示例程序参考刘凡的演练实现。

飞机大战-效果演示

airplaneGame.gif

开发笔记

1. 开发之前,要确保开发代码的独立完整性,可以通过xcode提供的group的方式来实现,具体请看示例程序

游戏流程图.png

2. 新建项目

    1)新建 AirPlayGame 分组,保存游戏相关的所有代码和素材
    2)新建images.bundle,将其拖拽至分组,并添加启动图片
    3)设置游戏运行方向为纵向,取消状态栏

3. 加载资源视图和标题视图

1) 创建LoadingView
2) 创建TitleView
    1> 使用游戏背景图片作为标题视图的背景
    2> 在屏幕的中心位置显示Logo图片
3) 使用后台线程加载资源
4) 新建游戏视图控制器,在显示标题视图后一秒,自动进入游戏

4. 显示背景视图

1) 加载图片资源
2) 游戏模型对象,来管理背景图片的滚动位置
    增加方法,向下移动游戏背景图片
3) 背景视图->背景图片
4) 实例化游戏模型和背景视图

5. 英雄战机

1) 加载图片资源
2) 游戏模型对象,管理英雄的位置以及其他...
3) 将英雄添加到游戏视图
4) 监听视图的touchMoved事件,更新英雄的模型数据中的位置
5) 在step方法中,更新英雄位置

6. 发射子弹

1) 加载图片资源
2) 游戏模型对象,部分存储在英雄模型中
3) 发射子弹fire,每次发射三颗,添加到bulletSet中
4) 控制器调用fire方法,真正发射子弹,每一颗子弹要建立一个UIImageView并添加到视图中

7. 子弹的后续处理

1) 每次时钟触发时,更新屏幕上所有子弹的位置,向屏幕上方移动
    屏幕上的子弹数量与hero中的bulletSet中的子弹对象数量是上一致的
2) 如果子弹飞出屏幕,将子弹视图移除屏幕,从视图中删除(需要借助临时的set)
3) 如果hero中的bulletSet中包含子弹数据,新建UIImageView添加到视图中

关于集合数据的处理,需要注意:
在遍历集合的过程中,不能直接删除集合中的任何内容,要用临时集合处理。

8. 敌机出动

1) 加载敌机资源,三类敌机的大小、动画上完全相同
2) 建立敌机模型,传入敌机尺寸,以便计算敌机出现的随机位置
3) 建立敌机视图,传入enemy对象和imageRes(单例)简化视图建立
    敌机视图中直接记录挨揍和爆炸的图像数组,以便后续处理
4)  扩展游戏模型,增加创建敌机方法,以便视图控制器调用
5) 在时钟方法中每秒创建3架小飞机,每隔10秒随机创建中飞机或者大飞机

9. 互殴——碰撞检测

1) 子弹击中敌机
    用子弹的伤害值减敌机的生命值
    1> 如果敌机的生命值小于等于0,敌机爆炸
    2> 如果大于0,显示挨揍图片

问题1. 如何做碰撞检测?
    使用CGRectIntersectsRect方法可以判断矩形是否相等

问题2. 当飞机的hp<=0时,如何播放飞机爆炸效果?
    由于无法准确地知道序列帧动画何时完成,因此上能使用序列帧动画来播放飞机爆炸的效果
            要解决此问题,可以通过逐帧播放来处理
    在飞机模型中增加两个属性
    1> toBlowup:需要播放爆炸序列帧标示
    2> blowupFrames:爆炸序列图片当前播放帧数
        如果帧数与爆炸数组中的总数相等,将飞机图片从视图和集合中删除

2) 敌机撞英雄
    一下就死
    检测完子弹和敌机碰撞之后,检测敌机和英雄的碰撞

    遍历敌机集合,依次与英雄做碰撞检测,当出现碰撞时
    播放英雄爆炸序列帧动画,动画完成后,调用方法关闭游戏时钟。

10. 界面扩展,增加暂停按钮和得分标签

1) 增加游戏视图,作为游戏的容器视图,以方便游戏界面的调整
2) 添加暂停按钮,通过按钮的tag判断游戏的运行状态,从而修改按钮显示图标,并且开启或关闭时钟
3) 添加得分标签,在model中,添加score属性,飞机摧毁时,修改游戏得分

11. 音效和背景音乐——没有音乐的游戏,是难以想象的!

1) 导入AVFoundation和AudioToolBox框架
2) 音效是使用C语言函数加载的
    特点:短,直接播放,上允许中断
    如果重夊建立,会生成多个SystemSoundId

结语

本示例程序有大量注释,主要思想是我们老生常谈的MVC。复习一下飞机大战示例程序地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 24,860评论 7 249
  • 满怀期待过年,如果一切正常发展,应该是如此。可是事情总是偏不如我意。 除夕,朋友家团年后,我带小的回家午睡,老公一...
    牛锤锤阅读 152评论 0 0
  • 连续一个多月,每天都是凌晨一点以后休息,各种学习与总结应接不暇,实在不舍得停下来…终于在早上,老婆爆发了,她应该是...
    承谦阅读 1,118评论 0 1
  • 天气预报最准时的一个月莫过于三四月了。即使全月都被标上“雨”的符号,大部分不会有偏差。三月迎来了南方特有的雨季。春...
    叁菇凉阅读 236评论 0 1