游戲總共分為4個功能模塊:
- 開始游戲(menuLayer)
- 關卡選擇(levelLayer)
- 游戲(gameLayer)
- 游戲結算(gameOverLayer)
Creator內組件效果如下:
游戲開始默認顯示menuLayer,游戲中,通過控制各個層級的顯示和隱藏,實現不同模塊的切換。例如開始游戲,點擊開始以后,觸發回調函數,切換到游戲關卡選擇界面,綁定關系如下圖:
實現代碼如下:
其他功能模塊實現類似。以下將分4個模塊分別講述各個模塊的實現。
1. 開始游戲 menuLayer
開始游戲模塊,開始游戲后默認顯示,其他模塊隱藏,功能實現相對簡單,界面布局完成以后,開始游戲按鈕添加響應事件即可,實現代碼如上,在此界面添加了一個小動畫,讓開始游戲按鈕不斷的放大縮小,代碼如下:
實現后的效果:
2. 關卡選擇 levelLayer
關卡選擇分兩步:第一步,界面顯示,通過配置文件,加載預制文件,顯示所有關卡;第二步,根據游戲情況,更新每一關卡信息。
2.1 第一步顯示關卡
游戲中所有關卡置於ScrollView控件上,每一個關卡,使用一個預制文件(levelItem),通過讀取關卡配置文件,加載所有關卡,加載完成后重新計算ScrollView內容的高度,加載關卡代碼如下:
下圖即是所有關卡預制的父節點:
預制腳本掛在到預制上:
2.2 第二步更新關卡
每一個levelItem預制上掛一個levelItem腳本組件,levelItem腳本組件負責更新信息,主要控制是否可點擊、通關星數、關卡等級、點擊進入,levelItem腳本組件更新UI代碼如下:
玩家的通過的信息,通過配置存儲文件,保存玩家通關信息,分為已通關、剛開啟和未開啟三種狀態,具體實現如下:
最終的顯示效果如下圖:
3. 游戲 gameLayer
游戲也分為兩步:第一步,顯示界面;第二步,游戲操作判斷
3.1 顯示界面
游戲內使用levelConfig.json配置每一關卡信息,每個關卡游戲部分由多行多列的方格組成,每一個關卡信息包含content、allRow、allCol、heroRow、heroCol、allBox屬性,allRow和allCol記錄總共行數和列數,heroRow、heroCol記錄英雄所在位置,allBox記錄箱子的總數,content是核心,記錄每個方格的屬性,根據不同的屬性顯示不同的物體,如牆面、地面、物體、箱子,可以通過修改配置,增加任意關卡。
讀取關卡所有數據,並根據每一個位置的屬性,顯示不同的實物。
根據配置創建關卡信息
根據類型創建元素:
游戲的所有元素,放置在下圖中gameControlLayer的上:
游戲開始后,顯示的效果如下(第一關,其他關類似)
3.2 游戲操作判斷
路線計算好后,玩家移動,若玩家點擊的是箱子區域,先檢測箱子前方是否有障礙物,若沒有則推動箱子,通過切換地圖的圖片和修改位置類型達到推動箱子的效果。
點擊地圖位置,獲取最優路徑,人物跑到指定點,實現如下:
獲取最優路徑算法:
4. 游戲結算 gameOverLayer
游戲結束后,根據成功推到箱子數,判斷游戲是否成功,游戲成功以后,更新關卡信息即可。
判斷邏輯如下:
Creator組件布局如下:
本游戲免費提供游戲源碼,需要源碼請關注公眾號『一枚小工』獲取