微信demo遊戲飛機大戰從無到有
現在建立新專案會預設給飛機大戰的demo,這裡給大家從基礎開始講解遊戲的從無到有是怎麼實現的。
具體實現步驟:
建立背景圖->背景圖運動起來->建立飛機並隨背景圖一起動->控制飛機移動->飛機發射子彈->建立敵機->消滅敵機->玩家飛機被擊毀->顯示結算介面
首先刪除所有自帶檔案,只保留game.js、game.json和project.config.json(原來的最好保留,因為等會要複製一些內容)
刪除game.js中的內容,此時模擬器為一片漆黑,如下圖所示
好,我們正式開始一步步開始編寫飛機大戰
官方提供了Adapter庫,方便我們操作,官方的解釋如下:
這裡weapp-adapter足夠用,就不用其它遊戲引擎了!
1、weapp-adapter
新建JS資料夾,在js資料夾中新建libs資料夾,將weapp-adapter複製進來(原來儲存中複製),然後js目錄下新建一個main.js檔案
2、在game.js中新增程式碼
main.js先空著,我們要先建立精靈類
3、建立精靈類
精靈,是構成遊戲中活動體(比如,飛機、野獸等遊戲人物)的最基本單元。
在JS目錄下新建sprite.js檔案,新增程式碼,定義背景圖的檔案,大小,位置等,並顯示在畫布上。
4、顯示背景圖
然後新增背景圖片images/bg.jpg,在background.js檔案中新增程式碼
背景圖片的方法已經完成,現在到主函式main.js中實現圖片顯示,新增程式碼
即可實現圖片載入,效果如下:
5、背景圖運動起來
如果細心的朋友會發現,前面背景圖方法裡是繪製了兩張圖片的,一張是和鋪滿螢幕的,另一張是在螢幕上方看不到的。
如果讓背景圖運動起來,就要是圖片向下移動,因為每一幀都會重新繪製,所以要再背景圖方法中加一個向下運動的方法
然後再loop迴圈中新增
此時背景圖就運動起來了
6、載入飛機,並隨地圖一起運動
新建玩家飛機類
在主函式中新增飛機相關
將loop迴圈中的內容拆分為重繪和更新
此時,玩家飛機出現,並可以和地圖一起運動
7、控制飛機移動
新增判斷手指的相關動作,以及判斷是否處於螢幕中
此時,飛機的位置可以通過手指和滑鼠進行控制
8、發射子彈
這個時候因為子彈會有很多個,而且超出螢幕的要回收掉,所以要加全域性管理器和物件池
Base目錄中新增pool.js檔案(物件池),js目錄中新增databus.js檔案(全域性管理器),這兩個檔案可以複製原來的
新增子彈類檔案bullet.js,複製原來的即可
飛機類新增程式碼發射子彈
主函式檔案中新增
Render中重繪子彈
Update中更新子彈的位置,並每隔20幀發射一枚子彈,數值越小,發射速度越快
已完成子彈發射的功能。
9、建立敵機
敵機會有爆炸的動畫,所以要新建一個幀動畫類和敵機類
幀動畫類:base目錄下的animation.js
敵機類:npc目錄下enemy.js
(複製過來就行,具體不做詳解)
主函式中新增生成敵機的程式碼
此時不會有敵機爆炸,也沒有撞機的功能
10、消滅敵機
主函式中新增全域性碰撞檢測,被註釋掉的是玩家飛機和敵機碰撞,暫時先不要
全域性碰撞方法要放到update函式中,此時可以消滅敵機,但是沒有爆炸動畫,玩家也是出於無敵狀態的。
新增程式碼,顯示爆炸動畫
11、玩家飛機被擊毀,遊戲結束
然後控制遊戲不再更新
這個時候畫面靜止不動了,遊戲結束了
12、顯示結算介面
在runtime資料夾中新增gameinfo.js檔案,用於積分和結算介面
判斷遊戲結束後,顯示結算頁面,並新增點選重新開始事件
遊戲結束後,手指觸控事件
此時,如果遊戲結束後,點選重新開始,會發現不正常,遊戲立馬結束了,原因是原來所有的遊戲單元都還在。
新增程式碼
所有的單元全部重置,此時又有新的問題,遊戲速度變的越來越快了
此時可以重新開始,但是飛機不能移動了,原因很簡單,事件監聽中還是開始的事件,要刪除掉
至此,已經完成了飛機大戰的製作了(音效就沒管了,需要可以自己研究一下)
結束。。等等,遊戲中的時候居然沒有顯示實時積分??這個居然漏了,現在補上
上面是顯示積分,下面是積分增加,消滅一個敵機加一
至此,真的結束了,至少每一步是怎麼實現的,應該有所瞭解,具體實現的邏輯可以自己研究,後續會有更多的例項提供大家參考。
順便打個廣告,歡迎大家關注笑林新記,每天都有不一樣的爆笑內容,可以放鬆一下,掃碼關注一下吧,我的更新也在這裡。
這裡也附上我個人的微信,歡迎大家和我交流