微信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文件,用於積分和結算界面

判斷游戲結束后,顯示結算頁面,並新增點擊重新開始事件

游戲結束后,手指觸摸事件

此時,如果游戲結束后,點擊重新開始,會發現不正常,游戲立馬結束了,原因是原來所有的游戲單元都還在。
新增代碼

所有的單元全部重置,此時又有新的問題,游戲速度變的越來越快了

此時可以重新開始,但是飛機不能移動了,原因很簡單,事件監聽中還是開始的事件,要刪除掉

至此,已經完成了飛機大戰的制作了(音效就沒管了,需要可以自己研究一下)
結束。。等等,游戲中的時候居然沒有顯示實時積分??這個居然漏了,現在補上

上面是顯示積分,下面是積分增加,消滅一個敵機加一

至此,真的結束了,至少每一步是怎么實現的,應該有所了解,具體實現的邏輯可以自己研究,后續會有更多的實例提供大家參考。
順便打個廣告,歡迎大家關注笑林新記,每天都有不一樣的爆笑內容,可以放松一下,掃碼關注一下吧,我的更新也在這里。

這里也附上我個人的微信,歡迎大家和我交流

