Flappy Bird 小游戲

各位讀者老爺大家好台丛,由于最近一直比較忙沒什么空挽霉,導(dǎo)致好久沒有更新文章了侠坎,明天有一天假期疫衩,就利用今晚時間和大家聊聊最近剛寫的一個小游戲,由于自己的時間比較少童芹,所以沒有在細(xì)節(jié)上做過多的處理鲤拿,程序還有很多不足的地方假褪,也歡迎大家多多指出或者提出自己的觀點(diǎn)近顷,游戲代碼仍然會在文章結(jié)尾處下載,廢話不多說缀遍,進(jìn)入正題饱须。

Flappy Bird當(dāng)年紅極一時的小游戲蓉媳,想必大家應(yīng)該都玩過,先上一張效果圖


效果動圖

我寫游戲仍然按照自己的一貫風(fēng)格,用最簡單的代碼或者邏輯實(shí)現(xiàn)游戲的主要功能玩荠,因為我的文章主要面向廣大新手,加上自己也是一個初學(xué)者屉凯,主要目的是為了和大家交流經(jīng)驗眼溶。

接下來說一下游戲的幾個主要功能是如何實(shí)現(xiàn)的:

第一步:游戲中的各種動畫的實(shí)現(xiàn) 用到的知識:CADisplayLink定時器,以及控件的frame變化

這里不得不說說我時如何在在storyboard中搭建我的游戲界面的


storyboard中搭建結(jié)構(gòu)

我用到的游戲素材分別是小鳥灌旧,上方管子枢泰,下方管子铝噩,地面背景,城市草地背景
后面的天空背景是我自己設(shè)置的view的背景色

游戲中看著是小鳥在往右飛毛甲,其實(shí)我設(shè)置的是鳥只是在上下移動,而背景圖片在不停往左移動玻募,那么我是如何實(shí)現(xiàn)的背景圖片在移動呢七咧。

看我的搭建結(jié)構(gòu),大家可以看到我在view中又放了兩個UIView控件艾栋,分別是view1和view2蝗砾,view1的尺寸和屏幕一樣,view2則在view1的右邊緊緊挨著拇泣,也就是說在屏幕外面暫時看不到矮锈,然后兩個都設(shè)置了背景顏色,以及地面背景圖苞笨,城市草地背景圖瀑凝,我能夠讓游戲中的背景一直不停移動原理就是view1和view2以相同速度左移,當(dāng)view1完全移出屏幕的時候谚中,讓它的frame變到view2的正右方,當(dāng)view2移出屏幕的時候就讓其frame變到view1的正右方宪塔,所以這樣就能用兩個view實(shí)現(xiàn)背景的無縫移動囊拜。

鳥和管道我都沒有放到view1和view2中,而是都放到了原有的view中南誊,為的是不讓鳥和view1,view2一起移動抄囚,管子的話倒是無所謂,個人喜好吧怠苔。

同理仪糖,管子也要以和view1,view2一樣的速度左移锅劝,從而實(shí)現(xiàn)一起移動的視覺效果故爵。

注意CADisplayLink的方法大概是每秒調(diào)用60次诬垂,所以方法中每次控件移動的距離設(shè)的盡量小一點(diǎn),這樣不會導(dǎo)致速度移動過快。

說完了背景以及管道的移動再說下小鳥的喉磁,小鳥是要一直讓它的frame的y值一直增加就能實(shí)現(xiàn)下降效果协怒,點(diǎn)擊屏幕鳥的位置向上移動的效果在touchesBegan方法里讓它y值每次增加一些就可以實(shí)現(xiàn)孕暇。

還有就是鳥扇動翅膀的效果芭商,就是兩個圖片不停的切換而已铛楣,動畫效果差不多就這么多了

第二步:死亡條件判定

第一種情況是鳥掉道地上簸州,這種比較簡單,只要鳥的y值加上本身的height大于或等于地面背景的y值就可以判斷

第二種死亡則是鳥碰到管子上搏存,這里稍微復(fù)雜一點(diǎn)點(diǎn)矢洲,就是一個簡單的碰撞檢測
以上方的管子為例,簡單的說也就是鳥的區(qū)域只要和管子的區(qū)域有一點(diǎn)重合就算失敗责静,不理解的話可以看看這一段代碼

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在一定范圍內(nèi)取個隨機(jī)值陌知,這樣看起來就像好多不一樣的管子了,為了追求難道赏参,你們也可以增加管子的數(shù)量以及合理的設(shè)置隨機(jī)長度范圍沿盅,這里要注意,上方的管子只需要改變height就可以腰涧,但下方的height變化后它就不是長在地上的樣子了,所以還要注意再根據(jù)隨機(jī)長度修改y值窖铡,讓管子的根一直扎在地上坊谁。

第四步: 分?jǐn)?shù)顯示

這里我遇到了一個bug滑臊,我一開始在view上放了個label控件準(zhǔn)備顯示分?jǐn)?shù),原理是每一個管子到達(dá)屏幕左邊的時候讓分?jǐn)?shù)加1雇卷,然后每次分?jǐn)?shù)變了的時候游戲就會刷新到開始的樣子,我請教了一下后得知這里涉及到多線程那塊的運(yùn)行循環(huán)的知識小染,等我這里研究研究再來更新,bug沒解決氧映,我試了試手寫代碼產(chǎn)生label脱货,這次沒有出現(xiàn)錯誤,就先用手寫的創(chuàng)建了振峻。

游戲大體上基本就這樣了择份,這和正版游戲的方法肯定有非常多不一樣的地方扣孟,我只是利用有限的知識簡單的實(shí)現(xiàn)了游戲的功能而已荣赶,大家有什么好的建議和想法,歡迎大家積極留言討論拔创。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剩燥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侣滩,更是在濱河造成了極大的恐慌变擒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件策添,死亡現(xiàn)場離奇詭異,居然都是意外死亡败富,警方通過查閱死者的電腦和手機(jī)摩窃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門猾愿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泽本,你說我怎么就攤上這事姻僧∑埠兀” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵艘狭,是天一觀的道長翠订。 經(jīng)常有香客問我巢音,道長,這世上最難降的妖魔是什么尽超? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任官撼,我火速辦了婚禮,結(jié)果婚禮上橙弱,老公的妹妹穿的比我還像新娘歧寺。我一直安慰自己,他們只是感情好棘脐,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布斜筐。 她就那樣靜靜地躺著,像睡著了一般蛀缝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屈梁,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天嗤练,我揣著相機(jī)與錄音榛了,去河邊找鬼。 笑死煞抬,一個胖子當(dāng)著我的面吹牛霜大,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播革答,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼战坤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了残拐?” 一聲冷哼從身側(cè)響起途茫,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溪食,沒想到半個月后囊卜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡错沃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年栅组,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捎废。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡笑窜,死狀恐怖致燥,靈堂內(nèi)的尸體忽然破棺而出登疗,到底是詐尸還是另有隱情,我是刑警寧澤嫌蚤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布辐益,位于F島的核電站,受9級特大地震影響脱吱,放射性物質(zhì)發(fā)生泄漏智政。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一箱蝠、第九天 我趴在偏房一處隱蔽的房頂上張望续捂。 院中可真熱鬧,春花似錦宦搬、人聲如沸牙瓢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾克。三九已至,卻和暖如春憔足,著一層夾襖步出監(jiān)牢的瞬間胁附,已是汗流浹背酒繁。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留控妻,地道東北人州袒。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像弓候,于是被迫代替她去往敵國和親稳析。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 初識iOS APP開發(fā)#### 在iOS APP開發(fā)中, main函數(shù)仍是程序的入口和出口, 但main函數(shù)不需要...
    DeanYan閱讀 6,191評論 0 3
  • UIView(控件) 功能一:界面顯示1. 屏幕上顯示的所有UI元素都叫做控件弓叛,也有人叫做視圖彰居、組件;按鈕(UIB...
    翻這個墻閱讀 637評論 0 0
  • 原鏈接:http://www.reibang.com/p/964313cfbdaa 原作者:西木柚子 僅供我個人收...
    油菜花花花花閱讀 585評論 0 1
  • 今天辦完了離校手續(xù)撰筷,最后一項是注銷一卡通陈惰。這應(yīng)該是我最后一次操作北京交通大學(xué)的圈存機(jī)了。最近要經(jīng)歷很多最后一次毕籽,最...
    阿歷Ali閱讀 1,418評論 0 0
  • **SQL TOP 子句 TOP 子句用于規(guī)定要返回的記錄的數(shù)目抬闯。 對于擁有數(shù)千條記錄的大型表來說,TOP 子句是...
    廖馬兒閱讀 3,187評論 1 46