Flappy Bird 小游戏

各位读者老爷大家好,由于最近一直比较忙没什么空,导致好久没有更新文章了,明天有一天假期,就利用今晚时间和大家聊聊最近刚写的一个小游戏,由于自己的时间比较少,所以没有在细节上做过多的处理,程序还有很多不足的地方,也欢迎大家多多指出或者提出自己的观点,游戏代码仍然会在文章结尾处下载,废话不多说,进入正题。

Flappy Bird当年红极一时的小游戏,想必大家应该都玩过,先上一张效果图


效果动图

我写游戏仍然按照自己的一贯风格,用最简单的代码或者逻辑实现游戏的主要功能,因为我的文章主要面向广大新手,加上自己也是一个初学者,主要目的是为了和大家交流经验。

接下来说一下游戏的几个主要功能是如何实现的:

第一步:游戏中的各种动画的实现 用到的知识:CADisplayLink定时器,以及控件的frame变化

这里不得不说说我时如何在在storyboard中搭建我的游戏界面的


storyboard中搭建结构

我用到的游戏素材分别是小鸟,上方管子,下方管子,地面背景,城市草地背景
后面的天空背景是我自己设置的view的背景色

游戏中看着是小鸟在往右飞,其实我设置的是鸟只是在上下移动,而背景图片在不停往左移动,那么我是如何实现的背景图片在移动呢。

看我的搭建结构,大家可以看到我在view中又放了两个UIView控件,分别是view1和view2,view1的尺寸和屏幕一样,view2则在view1的右边紧紧挨着,也就是说在屏幕外面暂时看不到,然后两个都设置了背景颜色,以及地面背景图,城市草地背景图,我能够让游戏中的背景一直不停移动原理就是view1和view2以相同速度左移,当view1完全移出屏幕的时候,让它的frame变到view2的正右方,当view2移出屏幕的时候就让其frame变到view1的正右方,所以这样就能用两个view实现背景的无缝移动。

鸟和管道我都没有放到view1和view2中,而是都放到了原有的view中,为的是不让鸟和view1,view2一起移动,管子的话倒是无所谓,个人喜好吧。

同理,管子也要以和view1,view2一样的速度左移,从而实现一起移动的视觉效果。

注意CADisplayLink的方法大概是每秒调用60次,所以方法中每次控件移动的距离设的尽量小一点,这样不会导致速度移动过快。

说完了背景以及管道的移动再说下小鸟的,小鸟是要一直让它的frame的y值一直增加就能实现下降效果,点击屏幕鸟的位置向上移动的效果在touchesBegan方法里让它y值每次增加一些就可以实现。

还有就是鸟扇动翅膀的效果,就是两个图片不停的切换而已,动画效果差不多就这么多了

第二步:死亡条件判定

第一种情况是鸟掉道地上,这种比较简单,只要鸟的y值加上本身的height大于或等于地面背景的y值就可以判断

第二种死亡则是鸟碰到管子上,这里稍微复杂一点点,就是一个简单的碰撞检测
以上方的管子为例,简单的说也就是鸟的区域只要和管子的区域有一点重合就算失败,不理解的话可以看看这一段代码

if (self.redButton.x + BirdWH >= self.greenView.x && self.redButton.x <= CGRectGetMaxX(self.greenView.frame) && self.redButton.y <= CGRectGetMaxY(self.greenView.frame)) {
        [self gameOver];
    }

这个管子能明白的话,下方的管子也肯定能理解,这就是两种死亡条件

第三步: 如果让管子不停显示,并且长度不一

管子不停显示和view1,view2不停显示道理一样,就是一走出屏幕左边就让它的frame来到屏幕右边,至于长度则是每次来到屏幕右边的时候让它的height在一定范围内取个随机值,这样看起来就像好多不一样的管子了,为了追求难道,你们也可以增加管子的数量以及合理的设置随机长度范围,这里要注意,上方的管子只需要改变height就可以,但下方的height变化后它就不是长在地上的样子了,所以还要注意再根据随机长度修改y值,让管子的根一直扎在地上。

第四步: 分数显示

这里我遇到了一个bug,我一开始在view上放了个label控件准备显示分数,原理是每一个管子到达屏幕左边的时候让分数加1,然后每次分数变了的时候游戏就会刷新到开始的样子,我请教了一下后得知这里涉及到多线程那块的运行循环的知识,等我这里研究研究再来更新,bug没解决,我试了试手写代码产生label,这次没有出现错误,就先用手写的创建了。

游戏大体上基本就这样了,这和正版游戏的方法肯定有非常多不一样的地方,我只是利用有限的知识简单的实现了游戏的功能而已,大家有什么好的建议和想法,欢迎大家积极留言讨论。

代码地址https://github.com/SaberVicky/Flappy-Bird-Demo-

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 初识iOS APP开发#### 在iOS APP开发中, main函数仍是程序的入口和出口, 但main函数不需要...
    DeanYan阅读 5,984评论 0 3
  • UIView(控件) 功能一:界面显示1. 屏幕上显示的所有UI元素都叫做控件,也有人叫做视图、组件;按钮(UIB...
    翻这个墙阅读 547评论 0 0
  • 原链接:http://www.jianshu.com/p/964313cfbdaa 原作者:西木柚子 仅供我个人收...
    油菜花花花花阅读 552评论 0 1
  • 今天办完了离校手续,最后一项是注销一卡通。这应该是我最后一次操作北京交通大学的圈存机了。最近要经历很多最后一次,最...
    阿历Ali阅读 1,387评论 0 0
  • **SQL TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是...
    廖马儿阅读 3,100评论 1 46