標籤:cocos2dx 遊戲開發
二遊戲架構2.1總覽
2.2詳細介紹2.2.1枚舉管理器
定義了整個遊戲裡的怪物,障礙物,炮塔,子彈,怪物動畫,子彈動畫,炮塔發射子彈時的動畫,怪物和障礙物消失的動畫,磚塊地圖的格子狀態,怪物的生存狀態等
2.2.2動畫管理員
這是一個單例類,在遊戲運行後執行初始化函數,並在初始化函數中載入動畫資源,根據ID製作相對應的動畫,並將動畫儲存到引擎提供的動畫緩衝中。該模組管理整個遊戲裡涉及到的動畫,並通過枚舉管理器中唯一識別的ID來引用。
2.2.3資料管理器
遊戲啟動後,該模組讀取各個檔案並將資料存放區到對應的資料結構中,在遊戲的過程中,對外提供資料的訪問借口。儲存遊戲中新產生的資料,並在遊戲關閉後將各個資料結構中的資料寫會對應的檔案,達到儲存進度的效果。另外,該模組還維護了全域的加速狀態資訊,如果處於加速狀態則怪物移動的更快,出怪時間間隔更小,各種動畫也是加速效果。
2.2.4遊戲層
遊戲最上層的邏輯,接受,響應並分發外部觸摸事件。負責載入地圖,控制遊戲流程,以及顯示遊戲的輸贏邏輯。
2.2.5地圖層
遊戲中最核心以及最複雜的邏輯處理中心。解析tmx格式的地圖,並將地圖上攜帶的資訊記錄到對應的資料結構中儲存。解析和本地圖對應的出怪設定檔,根據設定檔中的資料出怪,並維護地圖上怪物數組。根據地圖上的障礙物資訊,建立對應的障礙物並儲存到數組中。地圖層接受來自遊戲層的觸摸分發,並響應。同時還維護了炮塔數組,子彈數組。並在更新函數中更新這些數組中的元素,將死亡狀態的實體從數組中刪除,和從地圖層刪除。
2.2.6怪物
怪物作為一個實體,每建立一個怪物需要把它放到地圖層維護的數組中,怪物攜帶有本地圖上的道路資訊,在怪物的即時更新過程中能夠判斷什麼時候拐彎。擷取地圖層的子彈數組,在更新函數中做與子彈的碰撞檢測,如果碰到則播放與子彈對應的受擊動畫;如果死亡則將其設定為死亡狀態,消失掉。
2.2.7障礙物
每建立一個障礙物也儲存一份到地圖層的數組中,和怪物唯一的不同是,障礙物是靜止的,其餘的邏輯都一樣。
2.2.8炮塔
在地圖層接受遊戲層的觸摸事件,放置相應的炮塔,每當建立一個炮塔需要將其放倒地圖層的數組中。炮塔被建立後啟動更新邏輯,在更新函數中根據地圖層的怪物數組來選擇一個攻擊目標,如果有符合的則建立子彈,並將子彈添加到地圖層的子彈數組中;如果沒有攻擊目標,則不作響應。在點擊炮塔位置會展示出炮塔的升級與撤銷介面,炮塔升級需要消耗金幣,撤銷炮塔可以獲得金幣。
整個炮塔系統有三層類繼承體系,最上層的類是負責炮塔基礎資料的定義,中介層是負責區分各種不同的炮塔攻擊方式與攻擊邏輯,最下層是實際的炮塔與實際的攻擊邏輯,第三層的類會重複使用中介層中定義的攻擊方式與攻擊邏輯,實現了代碼複用。並在中介層與第三層之間使用了Template Method設計方式。
2.2.9子彈
子彈在炮塔的攻擊邏輯中被建立,並被添加到地圖層的子彈數組中。子彈出生後啟動更新函數,根據既定的方向移動,並一直執行子彈動畫。子彈與怪物發生碰撞,如果子彈為爆破類型則直接展示爆破動畫消失,如果子彈是持續型的則不會消失。