閔磊
摘 要:隨著手機、平板電腦等移動設(shè)備的普及,基于移動平臺的電子游戲逐漸成為人們生活中一種常見的娛樂方式。如何高效地開發(fā)適用于各平臺的游戲,并盡可能地挖掘其中的益智元素,就顯得尤為重要。本文將利用Cocos Creator引擎實現(xiàn)一款翻牌類記憶游戲,該游戲能對玩家的記憶能力進行鍛煉,并能基于Cocos Creator發(fā)布為適用于多種移動平臺的APP,具有較強的跨平臺性。
關(guān)鍵詞:移動平臺;游戲開發(fā);記憶游戲;Cocos Creator
一、引言
隨著移動終端技術(shù)的發(fā)展,手機、平板電腦等便攜式設(shè)備日益普及,人們可以隨時隨地利用碎片時間進行學(xué)習(xí)或是娛樂。在移動APP蓬勃發(fā)展的背景下,基于移動平臺的游戲開發(fā)逐漸呈現(xiàn)出上升的發(fā)展勢頭。
事實上,自文明誕生之日,游戲就一直伴隨著人類的成長,它通常以一種娛樂的方式傳遞知識或是對智力進行鍛煉。因此,當(dāng)今的電子游戲,特別是移動游戲APP,也應(yīng)體現(xiàn)出寓教于樂的價值。另外,移動終端不同于傳統(tǒng)PC,不同的手機或是平板在平臺及分辨率上存在較大的差異。如何高效地開發(fā)游戲APP,并使其能以較為統(tǒng)一的方式呈現(xiàn)給用戶,就成為進行移動游戲開發(fā)時不可回避的問題。
為了對益智類移動游戲APP的開發(fā)進行嘗試,也為了對解決上述問題的技術(shù)選型進行探索,本文研發(fā)一款基于Cocos Creator引擎的記憶類游戲。該游戲能通過娛樂競技的方式對玩家的記憶力進行鍛煉,并能基于Cocos Creator引擎發(fā)布到不同的移動平臺上,實現(xiàn)一次開發(fā)、處處使用。
二、Cocos Creator引擎
Cocos Creator是以Cocos2D-X為核心的游戲引擎,主要面向2D游戲開發(fā)。除擁有Cocos2D-X強大的游戲開發(fā)功能外,Cocos Creator還具有腳本化的特點,支持JavaScript、Typescript腳本編程,能實現(xiàn)組件化以及數(shù)據(jù)驅(qū)動的項目開發(fā)。Cocos Creator提供了便捷的可視化組件架構(gòu)方式,在編輯界面中能夠以所見即所得的方式快速設(shè)計游戲場景以及精靈對象等。在Cocos Creator中,腳本以組件的概念對應(yīng)到節(jié)點,具有典型的面向?qū)ο蟮奶攸c,便于開發(fā)者理解游戲邏輯。
實現(xiàn)的項目除了可以編譯為桌面程序外,Cocos Creator最為顯著的優(yōu)勢是能夠非常便捷地將游戲工程發(fā)布為Android、IOS、微信等移動應(yīng)用。與其他原生平臺的開發(fā)方式不同,在利用Cocos Creator進行游戲編程時,無需針對各平臺分別編寫游戲代碼。僅需使用JavaScript或Typescript進行一次開發(fā),即可通過Cocos Creator發(fā)布為各平臺對應(yīng)的APP,真正實現(xiàn)了跨平臺。在移動終端日益普及的背景下,這種對移動環(huán)境的支持使之具有極強的生命力。
三、游戲邏輯及系統(tǒng)結(jié)構(gòu)
(一)游戲邏輯
本文所實現(xiàn)的是一款經(jīng)典的翻牌類記憶游戲,界面中有16張卡片,每一張卡片對應(yīng)一個水果,正面為水果圖案,反面為卡片背面。默認情況下卡片均顯示背面圖案,當(dāng)用戶點擊卡片時,卡片短暫顯示水果的一面,用戶需要在該段時間內(nèi)記住水果圖案類別。當(dāng)連續(xù)兩次點擊的水果類別相同時,消除掉這兩張卡片,直至所有卡片均消完。完成游戲所用的時間越短,則說明成績越好,通過記住卡片的操作來實現(xiàn)對記憶力的鍛煉。
(二)系統(tǒng)結(jié)構(gòu)
在游戲操作及運行過程中,由Cocos Creator引擎負責(zé)與用戶的交互以及界面的渲染。而對于游戲的邏輯則有開發(fā)人員基于Cocos Creator引擎采用JavaScript語言實現(xiàn),對應(yīng)的需要完成相應(yīng)的數(shù)據(jù)結(jié)構(gòu)以及程序流程的開發(fā)。
根據(jù)游戲邏輯,最為重要的數(shù)據(jù)結(jié)構(gòu)是針對每一張卡片所設(shè)置的若干狀態(tài)位。各卡片對應(yīng)的狀態(tài)包括記錄是否消牌成功的標(biāo)志ClearState,以及卡片對應(yīng)的水果類別標(biāo)志等FruitType。
游戲中設(shè)置8個水果類別,每個類別對應(yīng)兩張卡片。初始時,對于每一張卡片隨機設(shè)置不同的水果標(biāo)志。對于游戲進行過程中玩家的翻牌操作,第奇數(shù)次翻牌設(shè)置為翻牌狀態(tài)A,第偶數(shù)次設(shè)置為翻牌狀態(tài)B。當(dāng)狀態(tài)A和B對應(yīng)的水果類別相同時,這兩次翻牌的卡片即可設(shè)置為消牌狀態(tài)。當(dāng)所有的卡片的消牌狀態(tài)均被記錄為成功時,游戲結(jié)束。游戲過程中設(shè)置計時器,計時的秒數(shù)即代表玩家的成績,時間越短成績越高。
在邏輯層面,整個游戲系統(tǒng)可以分為以下三個部分:
第一,UI以及界面渲染層。對于開發(fā)人員設(shè)計的游戲元素,由Cocos Creator引擎負責(zé)相關(guān)內(nèi)容的紋理渲染和顯示,并對用戶UI操作事件提供響應(yīng)處理函數(shù)入口。
第二,邏輯運行層。在Cocos Creator引擎提供的事件響應(yīng)處理入口函數(shù)中,完成對用戶UI操作的處理,并編碼實現(xiàn)游戲的運行邏輯。
第三,數(shù)據(jù)層。對游戲的相關(guān)運行及狀態(tài)數(shù)據(jù)進行設(shè)計和管理,為邏輯運行層提供必要的數(shù)據(jù)支持。
(三)程序流程
按照程序的運行機制,以及相應(yīng)的數(shù)據(jù)結(jié)構(gòu),程序流程可設(shè)計如下。
步驟1:初始化ClearState數(shù)組每一位為false;初始化FruitType數(shù)組中的元素為八種水果類別中的一個,且每一類水果僅且出現(xiàn)兩次;初始化翻牌動作ActionA和ActionB為null。
步驟2:處理奇數(shù)次翻牌動作,翻牌動作僅對ClearState為false的卡片有效。設(shè)置ActionA指向當(dāng)前卡片,并將當(dāng)前卡片做短暫的翻牌顯示操作。
步驟3:處理偶數(shù)次翻牌動作,翻牌動作僅對ClearState為false,以及ActionA所指向卡片不同于當(dāng)前卡片的卡片對象有效。設(shè)置ActionB指向當(dāng)前卡片,并將當(dāng)前卡片做短暫的翻牌顯示操作。
步驟4:如果ActionA和ActionB所指向卡片對應(yīng)的水果類型相同,則ClearState對應(yīng)標(biāo)志位設(shè)置為true,表示成功消除這兩張卡片;否則ClearState不做任何改變。ActionA和ActionB重新置為null。
步驟5:如果ClearState的所有狀態(tài)位均為true,則轉(zhuǎn)到步驟6,否則轉(zhuǎn)到步驟2等待下一輪翻牌動作。
步驟6:游戲結(jié)束。
四、相關(guān)技術(shù)實現(xiàn)
(一)游戲的界面元素
本文實現(xiàn)的是翻牌記憶游戲,游戲中的主要界面元素是16張卡片。對于這些卡片,在Cocos Creator中是根據(jù)“節(jié)點”來表現(xiàn)的。這里將卡片理解為節(jié)點,節(jié)點所需要的功能通過為其添加相應(yīng)的組件來實現(xiàn)。例如:如果需要處理顯示和基本操作相關(guān)的功能,則可添加“精靈”組件;如果需要動畫功能,則可添加“動畫”組件。在游戲中,由于涉及卡牌的顯示和翻轉(zhuǎn),需要為其設(shè)置“精靈”和“動畫”組件。
此外,對于背景圖片對應(yīng)的節(jié)點,也設(shè)置“精靈”組件。為便于背景顯示的方面,設(shè)置其“精靈”組件的Type顯示類型為SLICED即“九宮格”模式,該模式按九個區(qū)域的方式對圖片進行劃分,以便于圖片以邊界不變形的方式進行拉伸,比較適合作為大小可能調(diào)整的背景。
而對于“Play”按鈕,則可使用內(nèi)置的UI元素Button來實現(xiàn)。當(dāng)點擊該按鈕時,可以開始新一局游戲。在Cocos Creator中,指定按鈕下“Background”節(jié)點的精靈組件中的Sprite Frame為我們設(shè)置的圖片。然后設(shè)置Button的“Transition”屬性為“COLOR”,這樣按鈕圖片的顏色深度就會隨著按鈕按下劃過等狀態(tài)的改變而改變。按鈕的事件響應(yīng)函數(shù),則對應(yīng)著腳本中的編寫的OnBtnPlay()函數(shù),相關(guān)操作邏輯寫在該函數(shù)中。
(二)翻牌動畫的實現(xiàn)
Cocos Creator引擎中暫時還未提供圖片翻轉(zhuǎn)的動畫功能,但可通過兩張圖片交替顯示的方式變通實現(xiàn)。
設(shè)置16個正面卡片和16個背面卡片,分別置于下層和上層,默認背面卡片遮住正面卡片。初始時背面卡片Opacity透明參數(shù)為255,即完全顯示;正面卡片Opacity參數(shù)為0,即完全不顯示。當(dāng)玩家點擊背面卡片時,正面卡片運行Opacity漸變動畫逐漸顯示,而背面卡片則反之,這樣就形成了一個由背面向正面的翻轉(zhuǎn)動畫。
在這個過程中,Opacity漸變動畫是通過Cocos Creator操作界面中的“動畫編輯器”實現(xiàn)完成,在Animation Clip中添加Opacity屬性,在時間線上的兩個關(guān)鍵幀中設(shè)置透明度變化的起始值。
(三)游戲的腳本掛載
通過以上的界面以及動畫設(shè)計,可以實現(xiàn)游戲的部分功能,這種所見即所得的實現(xiàn)方式也是Cocos Creator引擎提高游戲開發(fā)效率的關(guān)鍵所在,但游戲的內(nèi)在邏輯還是避免不了需要編程實現(xiàn)。
本文所述游戲項目使用JavaScript腳本進行程序開發(fā),每一個JS文件對應(yīng)一個腳本。對于腳本而言,需要掛載到一個節(jié)點上,也就是為該節(jié)點添加腳本組件。為了在腳本中能對游戲的全局進行操控,本文將腳本掛載到所有游戲界面元素的頂層節(jié)點上,即掛載到了默認最頂端的Canvas節(jié)點元素上。
(四)事件的相應(yīng)
在于界面中的“Play”按鈕,Click Events事件數(shù)設(shè)置為1,對應(yīng)的響應(yīng)函數(shù)則設(shè)置為腳本中的OnBtnPlay()函數(shù)。而對于正面卡片和背面卡片,在腳本中分別聲明大小為16的數(shù)組,數(shù)組元素的類型為cc.Sprite。在Cocos Creator操作界面中,將對應(yīng)卡牌拖到數(shù)據(jù)源窗口中,實現(xiàn)數(shù)據(jù)的綁定。
而對于點擊翻牌的卡片,則用node.on()函數(shù)注冊事件,并指定響應(yīng)函數(shù)。在這里,事件的類型使用系統(tǒng)內(nèi)置的cc.Node.EventType.TOUCH_START。該事件既能響應(yīng)桌面系統(tǒng)的鼠標(biāo)點擊操作,又能關(guān)聯(lián)到手機或平板電腦上的觸摸操作,具有較強的平臺通用性。
(五)針對移動平臺的游戲發(fā)布
Cocos Creator支持將游戲項目發(fā)布成Android、IOS、微信等移動平臺上的APP形式。以Android為例,在環(huán)境設(shè)置中設(shè)置好NDK、Android SDK、JavaScript引擎以及Cocos2D-X引擎的路徑后,即可通過項目的“構(gòu)建→編譯”步驟實現(xiàn)目標(biāo)程序的生成。對于開發(fā)人員而言,可以做到移動平臺差異性的透明性。
五、結(jié)語
基于移動平臺的游戲開發(fā),是游戲開發(fā)領(lǐng)域十分重要的發(fā)展方向。如何滿足移動游戲開發(fā)的跨平臺需求,并充分體現(xiàn)游戲的益智性也是游戲開發(fā)需要關(guān)注的問題。本文利用Cocos Creator引擎,對基于移動平臺的記憶類游戲的開發(fā)進行了嘗試,驗證了基于該引擎游戲開發(fā)的跨平臺特性和開發(fā)高效性。
參考文獻:
[1]張景焱,馬春江,潘勝偉,等.基于Cocos Creator開發(fā)交互游戲的分析[J].信息與電腦(理論版),2020(3):81-82.
[2]王智勇,徐皓卿,劉琪偉,等.計算機游戲中國象棋的開發(fā)與實現(xiàn)[J].電腦知識與技術(shù),2020(7):63-64,90.