閔磊 江漢大學
伴隨著便攜式硬件技術的進步,基于移動終端的各類應用軟件迎來了新的發展契機。人們利用手機或平板電腦等移動設備,可以隨時隨地通過各類APP進行學習、購物或是娛樂。在眾多面向移動終端的應用中,游戲軟件具有較大的發展需求。當今社會高速發展,人們的生活節奏日益加快,在碎片化的時間里適當地利用游戲進行休閑,可以在一定程度上緩解人們緊張的情緒,有益身心健康。此外,游戲產業集動畫技術、計算機技術、軟件技術于一體,可以有力拉動高新技術產業的發展。
自計算機技術出現以來,游戲工業就保持著強勁的發展勢頭,各類相關技術和開發方法都取得了較大進步。但是,從“PC時代”到“移動互聯網時代”的轉變,也為傳統游戲產業帶來了新的挑戰。目前,各類游戲都在積極推出基于手機等移動端的新版本,以適應人們對移動化應用的需求。在眾多游戲開發引擎中,Cocos系列游戲引擎對于移動設備的支持相對較為完善,可便捷地發布針對Android、IOS等平臺的應用。Cocos Creator游戲引擎是在Cocos2D-X基礎之上開發的具備可視化編輯功能的游戲引擎,它在保證Cocos底層引擎功能的基礎之上,以可視化編輯的方式簡化了游戲開發的過程,非常適合移動互聯網時代高迭代的效率要求。為深入分析移動端游戲的開發原理,本文基于Cocos Creator游戲引擎,對一款經典的飛機戰斗類游戲的實現機制進行了研究。一體化的開發流程則能將資源編輯、UI制作、代碼編寫、調試、發布等各部分工作統一以來,便于團隊合作,從而提高開發效率。
目前,Cocos Creator游戲引擎支持JavaScript和TypeScript兩種腳本語言。能夠在項目開發完成后,通過與不同平臺的SDK對接,實現Android、IOS、Web甚至微信等平臺上的APP發布,從而真正做到硬件及軟件層面的跨平臺。在本文研究中,使用JavaScript作為開發語言,研究了相關的游戲邏輯。
Cocos Creator游戲引擎是Cocos系列游戲引擎中較新的一款產品,它基于Cocos2D-X,能提供Cocos引擎的大部分核心功能。此外,人性化的編輯界面可將開發者從繁瑣的界面、動畫等常規功能中解放出來,使其能專注于游戲邏輯本身的開發。而
本文所研究的是一款經典飛機大戰游戲,游戲中的己方飛機由玩家操控,敵方飛機由程序邏輯自動生成,可以被視為NPC(非玩家角色)。乙方飛機有一定的生命值,在游戲進行過程中如果被敵方飛機擊中,則生命值降低,降為零時游戲結束。若敵方飛機被己方擊中,則直接爆炸銷毀。為提高游戲的真實性,敵方子彈與己方子彈如果發生碰撞則相互銷毀,產生爆炸效果。玩家對飛機的操控通過編寫的操控控件來實現,該控件可適應手機終端的觸控拖動事件,能通過錨點的拖動來實現飛機飛行方向和速度的控制。每擊中一架敵方飛機,得分分數增加,游戲結束時的分數代表本輪游戲的成績。
不管游戲的邏輯如何,界面上所呈現的無非是飛機子彈的運動、各種特效以及用于用戶交互的UI控件。為了使結構更加清晰,這些元素在架構上可進行分離,構成“界面表現與交互層”。而對于游戲的規則和邏輯,則主要由程序員通過代碼層面的算法來實現。因此,該層可作為“邏輯運行層”,主要承擔游戲邏輯的運行。而游戲邏輯運行的直接結果,就是游戲中相關數據值的改變,例如生命值、得分、時間等,這些數據的存儲和維護就依賴于“基礎數據層”。
因此,“界面表現與交互層”、“邏輯運行層”以及“基礎數據層”,它們共同構成了游戲工程的主體框架。
1.界面表現與交互層。負責對各種界面元素進行呈現,并承擔基于UI控件的用戶交互。該層的渲染功能、飛機、子彈的運動、動畫,以及爆炸特效等主要借助于Cocos Creator的表現層來實現;UI控件則由Cocos Creator中基本的節點元素通過組合的方式構成,完成用戶對飛機操控的交互功能。
2.邏輯運行層。該層主要實現游戲的運行邏輯,在本文所述游戲中,子彈的發射、子彈與飛機之間的碰撞檢測、生命值及游戲得分的變化等,都由此層的邏輯來控制。這些邏輯主要通過游戲開發者所編寫的腳本語言來實現,操控邏輯則通過“交互層”觸發的事件來激活。
3.基礎數據層。維護游戲運行時的狀態數據,包括元素的位置、速度、運動方向、分數值等。這些數據既是邏輯層的輸出,也為邏輯層提供必要的數據支撐,同時也是表現層進行數據呈現的數據基礎。
游戲的輸入為用戶的UI交互操作,輸出為游戲的運行狀態以及呈現給玩家的分數、成敗等運行結果。
結合游戲的運行邏輯,可設計如下的實現步驟對游戲的過程進行描述:
步驟1:根據元素的圖片創建飛機、子彈、爆炸效果等節點或動畫,并創建自定義的方向觸控控件等游戲必須的節點。
步驟2:針對主場景的運行,創建腳本GameCtrlJs.js,并將其作為腳本組件掛載到主場景中的Canvas下,該腳本負責對游戲主邏輯進行控制。
步驟3:對于己方飛機、敵機、子彈、爆炸效果、等分別創建對應的腳本,并掛載到對應節點上,這些腳本負責本節點的行為邏輯,例如爆炸結束后的實例銷毀、飛機定期發射子彈等。
步驟4:當玩家點擊游戲開始時,加載主場景,在GameCtrlJs腳本中通過schedule方法定期調用創建敵機的函數。同時,敵機依賴自身掛載的控制腳本也定期發射子彈。敵我雙方的飛機和子彈分別歸屬于不同的分組,不同分組用于碰撞時的對象檢測。
步驟5:玩家通過觸控控件對己方飛機的方向和速度進行控制,并可觸發射擊功能。射擊時動態創建己方子彈,子彈通過cc.moveBy動作進行位置的移動,當接觸到敵方子彈或者飛機時,雙方節點銷毀并同時播放爆炸的動畫。
步驟6:通過敵我雙方碰撞處理的邏輯,動態調整生命值和得分,將其顯示到主場景對應的控件上。如果生命值降為零,則游戲結束,將跳轉到ReadyScene場景的按鈕進行Active激活顯示。
在本文所述的飛機大戰游戲中,最為關鍵的是敵我雙方的飛機和子彈在運動中相遇時的碰撞檢測,它將直接影響擊毀或是得分的游戲邏輯,游戲通過Cocos Creator內置的物理引擎實現該功能。腳本中利用cc.director類的getCollisionManager()方法取得碰撞檢測管理器,并將其enable屬性設置為true。同時,將敵我雙方的飛機、子彈分別設置為歸屬于不同的分組,對應分組之間設置碰撞檢測標志。編寫碰撞檢測響應函數,實現相應的游戲邏輯。
移動設備不同于傳統電腦,它更多的是利用觸摸屏而非鍵盤進行UI交互。因此,需要設計觸控控件對飛機的運動方向和速度進行控制。本文在控件中設置錨點,利用節點(即該錨點)的觸控事件響應錨點的拖動操作。錨點的拖動方向以及偏離中心點的位移大小則用向量來表示,向量的方向和模就代表操作飛機的方向和速度。該自定義控件也可導出為資源,供其他項目復用。
在移動設備日益普及的背景下,開發能運行于不同移動終端的游戲產品,是游戲產業必須面對的問題。本文基于Cocos Creator游戲引擎,以一款飛機大戰游戲為例分析了移動平臺下游戲開發的實現機制,并對碰撞原理、觸控操作等技術進行了探討,相關研究內容對于移動平臺環境下的游戲開發具有一定借鑒意義。