自從微信的跳一跳出來后查坪,很多公司都著手小游戲的開發(fā),對于小游戲來說最重要的就是不用安裝歧蒋,微信傳播廣泛土砂,容易上手利用用戶碎片時間。
然后我也開始學習小游戲的開發(fā)谜洽,用1萝映、2天時間看完了技術胖的教程后,就擼起袖子開始模仿一個小游戲來入手熟悉了阐虚。
這里有相關的學習資料序臂,供大家參考http://forum.cocos.com/t/creator-3-31/39917
剛好在朋友的分享下玩了JD最近開發(fā)的小游戲——一起爬梯,覺得這游戲適合練手,所以就從這款游戲開始了奥秆。
圖片素材可以在這里找到愛給網(wǎng)逊彭。
PS:看見藍色的字就點一點吧,沒準藏了小驚喜构订。
一侮叮、準備工作
因為只是一個demo并且沒有美術設計,就在愛給網(wǎng)通過搜索相應關鍵詞來找到所需要的素材悼瘾。其實也比較簡單囊榜,找一張豎的場景背景圖,然后相應的樓梯方塊和一張人物素材就可以了亥宿。
二卸勺、創(chuàng)建項目
把素材都找好后就可以開始創(chuàng)建項目了,我把項目命名為Climb-Stairs箩绍,然后把項目的場景孔庭、腳本和素材都創(chuàng)建好,分好文件類目材蛛,大概就是下面這樣了。
三怎抛、開始編寫核心代碼
在開始編寫代碼前卑吭,首先需要分析游戲的玩法,和實現(xiàn)的思路马绝。一起爬梯豆赏,就是角色在不停的往上爬,需要點擊屏幕左右來控制角色的方向富稻,如果方向錯了掷邦,或者時間到了,角色將會掉落萬丈深淵椭赋,游戲結(jié)束抚岗。
通過游戲我們能發(fā)現(xiàn),其實游戲中的人物一直都是在屏幕的固定位置哪怔,只是在動作上有左右的變向宣蔚。而正真在移動的只有每一塊臺階,點擊屏幕左邊臺階就從左往角色中間移動认境,點擊屏幕右邊臺階就從右往角色中間移動胚委。這就讓用戶有錯覺角色是一直在往上爬的效果了。
那我們開始先創(chuàng)建一個GameScene的場景叉信。
把背景圖和角色都拖進里面亩冬,然后再加入一個Label來顯示分數(shù)。
之后再創(chuàng)建一個stair的Prefab硼身,因為是重復的對象所以創(chuàng)建Prefab方便使用硅急。
同時我調(diào)整了stair的Size枢冤,因為這是別人做好的素材,在大小上可能有點大了铜秆,所以我們可以根據(jù)自己的需要來調(diào)整大小淹真。
因為如果每個臺階單獨在場景中添加的話,那每一步都需要對已經(jīng)生成的stair節(jié)點進行位置的移動连茧,這無疑是不科學的核蘸,然后我想到的方法就是添加一個空節(jié)點,相當臺階的容器view啸驯,這樣只要把生成的stair都加在里面就可以了客扎。這樣點擊時候的臺階移動,就是容器view自己在移動罚斗,達到了整體移動的效果徙鱼。
這里我們通過隨機數(shù)來生成臺階的位置,是左邊還是右邊针姿,因為游戲剛開始時第一塊是在角色的正下方袱吆,所以設置好第一塊的位置。之后根據(jù)隨機數(shù)小于等于0.5的在左邊距淫,大于0.5的在右邊绞绒,然后每生成一塊就記錄上一塊的位置,這樣就可以不停的往上增加了榕暇。
生成臺階后蓬衡,我們就需要在屏幕上添加點擊事件的方法。讓角色和臺階都動起來彤枢。
因為我們不能只讓臺階在移動而角色一動不動狰晚,這樣對于一款游戲來說太過死板了,所以我們給角色添加了一個向上跳躍的動作缴啡,之后再回到原來的位置壁晒。而之前也說了臺階的移動實際上是該節(jié)點容器的移動,通過計算得出了需要移動的距離盟猖,這樣角色和臺階在點擊時一起運動就可以了讨衣。
四、添加碰撞檢測
一直沒想通如果用戶點擊方向錯誤式镐,角色踩空掉落萬丈深淵的判斷方法反镇,之前看過可以通過兩個節(jié)點的交集來判斷,但這樣會和其他的臺階也有交集的可能娘汞。之后想到了通過碰撞的方法來實現(xiàn)角色是否觸碰到了臺階歹茶,解決了角色踩到臺階還是踩空的Over條件。如果大家還有其他更好的判斷方法,可以在下方評論惊豺。
第一步為角色添加不規(guī)則碰撞
點擊player然后添加組件—添加碰撞組件—Polygon Collider燎孟,然后點擊Editing,這樣就可以通過手動調(diào)節(jié)碰撞的位置了尸昧。我們知道角色與臺階的碰撞主要是角色的腳和臺階的正中位置揩页,這樣就可以避免了角色與其他臺階的誤觸發(fā)。
同樣的烹俗,我們給臺階也加入不規(guī)則碰撞爆侣,因為碰撞是需要兩個物體觸發(fā)的,所以兩個節(jié)點都需要添加幢妄。而如果在一些場景需要不同的節(jié)點產(chǎn)生不同碰撞效果的兔仰,我們可以編輯對應的組別。
分組管理可以清晰看到蕉鸳,哪組對應的組別才會發(fā)生碰撞乎赴。
在節(jié)點上添加了碰撞區(qū)域后,之后就可以在代碼上添加碰撞后所觸發(fā)的事件了潮尝。
這三個是官方的碰撞方法榕吼,只要開啟了碰撞監(jiān)測添加以上方法就會觸發(fā)。
五衍锚、添加游戲結(jié)束條件
之前也說過了友题,現(xiàn)在游戲里面判斷角色踩空的判斷條件不是很好,所以這里只說出了游戲現(xiàn)在的做法戴质。
其實現(xiàn)在主要通過點擊后啟動一個定時器去檢測角色是否與臺階觸碰,通過onCollisionEnter方法可以知道如果碰撞了就是沒有問題isTouched為true踢匣,如果方向錯了那在指定時間內(nèi)就會是false告匠,這樣就可以認定為踩空,會掉落萬丈深淵而游戲結(jié)束离唬。
這里的判斷條件是根據(jù)定時器來觸發(fā)后专,所以如果點擊比較快的時候,出現(xiàn)了時間差那isTouched有可能是false而認定為失敗输莺。還有就是在踩空的時候會出現(xiàn)一小段停滯才會觸發(fā)掉落的動畫戚哎,因為定時器調(diào)用的方法時間還沒到,所以整體不夠順暢嫂用。望大家有更好的方法分享出來型凳。
六、添加分數(shù)更新
在Game.js中已經(jīng)添加了scoreLabel來顯示分數(shù)嘱函,那我們要在產(chǎn)生碰撞的方法來增加分數(shù)甘畅,我們都知道了碰撞成功就代表方向?qū)α藳]有踩空。所以在這個方法里面添加相應的方法就可以了。
把分數(shù)添加到緩存里面疏唾,然后在當前的Canvas下找到scoreLabel的節(jié)點蓄氧,定義為cc.Label類,在使用前判斷一下是否為nil來避免報錯槐脏。就這樣整個游戲就基本完成了喉童。
七、游戲結(jié)束重新游戲
添加一個顯示最終得分的和重新游戲按鈕顿天,點擊按鈕后將重新加載游戲場景堂氯。
八、游戲效果和展望
因篇幅有限露氮,有部分細節(jié)沒有寫出來祖灰,大家可以下載源碼查看,已添加好相關注釋畔规。
游戲源碼請戳這里局扶,歡迎大家來star,謝謝叁扫!
游戲算是基本完成了但還沒有達到和一起爬梯的效果三妈,后期可以加入帶有炸彈、花的阻礙物莫绣。還有還沒加入時間倒數(shù)畴蒲,踩到臺階后臺階會逐漸加速下降,讓用戶不點擊跳躍的話也會結(jié)束游戲对室。還需要加入不同的聲效來讓游戲體驗更好模燥,這些功能將會在之后慢慢完善。
入坑cocos creator還不是很久掩宜,歡迎大家來吐槽蔫骂。
最后廣告時間五年日記本——一天一問感受變化的自己。