沈晨+謝璨
摘要:該文介紹了一款基于Cocos2d-x引擎的跑酷類手游的開發(fā)全過程。首先對(duì)Cocos2d-x技術(shù)的優(yōu)點(diǎn)以及三層架構(gòu)模式進(jìn)行簡要介紹,然后結(jié)合軟件工程的思想,對(duì)游戲的需求分析進(jìn)行了詳細(xì)描述,接著給出了游戲的總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),包括游戲體系結(jié)構(gòu)、功能模塊、類設(shè)計(jì)等。最后介紹了游戲中幾個(gè)關(guān)鍵功能的具體實(shí)現(xiàn),并且給出了部分游戲界面展示,同時(shí)對(duì)游戲進(jìn)行了系統(tǒng)的測試,各測試項(xiàng)均顯示正常。
關(guān)鍵詞:Cocos2d-x;游戲引擎;跨平臺(tái);跑酷
中圖分類號(hào):TP319 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)29-0046-02
伴隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的深入,智能手機(jī)、平板電腦、智能手表等移動(dòng)智能設(shè)備在近幾年的爆發(fā)性地飛速發(fā)展,移動(dòng)終端手游市場成為了最受人們關(guān)注的市場之一。而在手游的開發(fā)過程中,開發(fā)者不得不面對(duì)一個(gè)移動(dòng)設(shè)備多平臺(tái)的現(xiàn)狀,使用不同語言在不同的平臺(tái)上做開發(fā)和維護(hù),必將使得開發(fā)成本不斷增加。因此,一個(gè)支持跨平臺(tái)的游戲引擎在廣大開發(fā)者和眾多游戲企業(yè)中必將備受歡迎。而Cocos2d-x[1]引擎擁有強(qiáng)大跨平臺(tái)能力,并繼承Cocos2d系列引擎的一貫特點(diǎn):靈活、高效、操作簡單,并且功能非常強(qiáng)大。Cocos2d-x只需要編寫一次代碼,就可以無縫的部署到包括IOS、Android、Windows、OS X在內(nèi)的大量主流系統(tǒng)平臺(tái)上[2]。在當(dāng)今終端移動(dòng)多樣化的時(shí)代,把游戲部署到多種平臺(tái)是游戲開發(fā)的大趨勢(shì),Cocos2d-x的跨平臺(tái)能力無疑幫助開發(fā)者節(jié)約了大量的時(shí)間和資本。本文利用Cocos2d-x引擎設(shè)計(jì)開發(fā)出了一款可支持多個(gè)移動(dòng)端的跑酷類游戲—《奔跑吧馬里奧》,在各項(xiàng)功能以及性能測試中,均顯示良好。
1 Cocos2d-x技術(shù)簡要分析
游戲引擎一般理解為已編寫好的游戲框架或者圖像應(yīng)用程序的核心組件。引擎為游戲開發(fā)者提供開發(fā)游戲所需的各種框架組件,其目的是為了讓游戲設(shè)計(jì)者能容易并且迅速的做出游戲而不用從零開始。Cocos2d-x使用C++開發(fā),基于MIT開源協(xié)議及OpenGL ES,支持Lua、Javascript 腳本語言和C++語言,支持插件和二次開發(fā)。Cocos2d-x引擎架構(gòu)分三個(gè)層次:最底層為操作系統(tǒng)層,該層包括引擎所支持的所有移動(dòng)操作系統(tǒng),如IOS、Android、Windows Phone、OSX、Windows、Ubuntu等等;中間層為引擎層,包括圖像模塊、聲音模塊、物理引擎模塊、腳本模塊;最上層為應(yīng)用游戲?qū)?,包括了開發(fā)者所構(gòu)建的整體游戲[3][4]。
2 游戲需求分析
《奔跑吧馬里奧》(RunningMario)是一個(gè)受90年代風(fēng)靡一時(shí)的霸王機(jī)上的經(jīng)典小游戲《超級(jí)馬里奧》及前兩年火爆全中國的跑酷類手游《天天酷跑》這兩款游戲啟發(fā)而產(chǎn)生的游戲作品。因而游戲作品以馬里奧世界的各種角色、敵人、道具等等主題元素為基礎(chǔ),以跑酷類游戲的快速、刺激、挑戰(zhàn)性、易上手、難精通等等游戲理念為核心。游戲總體功能需求如圖1所示。
1) 開始界面
l 游戲設(shè)置:點(diǎn)擊設(shè)置按鈕可以設(shè)置背景音樂和音效的開關(guān);
l 游戲相關(guān):點(diǎn)擊游戲相關(guān)按鈕可以查看游戲版本,開發(fā)者等的信息;
l 挑戰(zhàn)教程:點(diǎn)擊開始挑戰(zhàn)按鈕,第一次進(jìn)行挑戰(zhàn)時(shí)會(huì)顯示游戲教程;
l 每日簽到:點(diǎn)擊每日簽到按鈕,可進(jìn)行每日簽到,獲得金幣。
2) 選擇關(guān)卡模塊
l 動(dòng)態(tài)背景:界面背景由上向下循環(huán)滾動(dòng);
l 特效動(dòng)畫:選擇關(guān)卡后,馬里奧動(dòng)畫跳落到關(guān)卡標(biāo)志上;
l 滑動(dòng)選擇關(guān)卡:向左滑動(dòng)選擇關(guān)卡。
3) 游戲界面
l 暫停、繼續(xù)、重新游戲:在游戲過程中,可點(diǎn)擊暫停菜單按鈕,暫停菜單里面可以點(diǎn)擊繼續(xù)游戲、重新游戲、主菜單;
l 查看任務(wù)欄、能量條進(jìn)度:通過查看左上角的任務(wù)欄可知道地圖完成進(jìn)度,通過查看能量條進(jìn)度可知道主角特殊技能是否激活;
l 地圖顯示:當(dāng)玩家進(jìn)入選中的關(guān)卡后,自動(dòng)加載相應(yīng)地圖;
l 道具顯示:隨機(jī)產(chǎn)生道具放在地圖隨機(jī)位置;
l 闖關(guān)結(jié)算:當(dāng)玩家闖關(guān)成功或者失敗,都會(huì)有金幣的結(jié)算,可查看排行榜;
l 玩家控制角色:玩家可以點(diǎn)擊跳和攻擊按鍵控制角色進(jìn)行跳、二段跳、攻擊;
l 角色釋放技能:在能量條滿的前提下,激活角色特殊技能,點(diǎn)相應(yīng)技能按鈕釋放技能;
l 敵人攻擊:在地圖隨機(jī)位置產(chǎn)生的敵人進(jìn)行攻擊動(dòng)作。
3 游戲設(shè)計(jì)
3.1 游戲總體設(shè)計(jì)
游戲RunningMario的體系結(jié)構(gòu)主要包括:游戲業(yè)務(wù)部分,數(shù)據(jù)持久化部分[5]。
游戲業(yè)務(wù)部分細(xì)分為四個(gè)層次:
1) 游戲場景層:由開始場景、選擇關(guān)卡場景、游戲場景三大場景組成,該層封裝了地圖創(chuàng)建、主角創(chuàng)建、敵人創(chuàng)建,GUI創(chuàng)建,動(dòng)畫創(chuàng)建等邏輯;
2) 游戲精靈層:包括主角精靈,敵人基類精靈,各敵人精靈,每一個(gè)精靈都封裝了自身的邏輯,如主角精靈的跳動(dòng)、技能釋放等,各敵人攻擊、被攻擊等邏輯;
3) 游戲公共層:包含整個(gè)游戲的配置文件,整個(gè)游戲的公共函數(shù),如特效場景切換、生成素材文件存儲(chǔ)地址和動(dòng)態(tài)匹配生成動(dòng)畫等邏輯[6];
4) 游戲系統(tǒng)層:主要用于游戲業(yè)務(wù)邏輯與數(shù)據(jù)持久化邏輯之間交互完成玩家數(shù)據(jù)存儲(chǔ)邏輯和游戲管理器管理整個(gè)游戲。
數(shù)據(jù)持久化部分,通過獲取從游戲業(yè)務(wù)邏輯傳遞過來的玩家數(shù)據(jù),完成數(shù)據(jù)存儲(chǔ)操作。
3.2 游戲詳細(xì)設(shè)計(jì)
游戲RunningMario主體的類設(shè)計(jì)有公共類、場景類、主角類、敵人類、游戲管理類、數(shù)據(jù)存儲(chǔ)類這六大類[7],各個(gè)類的作用為:1)公共類:定義了整個(gè)游戲的公共配置文件及公共工具方法。2)場景類:定義了游戲包含的開始、選擇關(guān)卡和主游戲三大場景,其之下由多個(gè)層類組成,各個(gè)層類又定義了游戲各式各樣的GUI、地圖等的生成屬性和方法,如:簽到板、控制角色的按鍵、闖關(guān)結(jié)算板等。3)主角類:定義了馬里奧的存活狀態(tài)、各種動(dòng)作和釋放技能等屬性和方法。4)敵人類:定義了烏龜、蘑菇層、刺猬、飛彈四大敵人類及其攻擊動(dòng)作等屬性和方法。5)游戲管理類:定義了玩家的數(shù)據(jù)、數(shù)據(jù)修改、數(shù)據(jù)查詢等等的屬性和方法。6)數(shù)據(jù)存儲(chǔ)類:定義了游戲管理類中的玩家數(shù)據(jù)的增、刪、改、查的基本操作方法[8]。endprint
4 游戲?qū)崿F(xiàn)
由于Cocos2d-x支持跨平臺(tái),單個(gè)平臺(tái)上的工程開發(fā)完成后,可通過跨平臺(tái)環(huán)境移植游戲到Cocos2d-x所支持的不同平臺(tái)上運(yùn)行。開發(fā)過程中我們選擇了Win32工程作為開發(fā)基礎(chǔ)工程,待Win32工程完成后,進(jìn)行跨平臺(tái)移植游戲到Android平臺(tái)上運(yùn)行。需要用到的開發(fā)工具包括:Visual Studio 2015、Cocos3.7、Python2.7,跨平臺(tái)移植開發(fā)工具包括:JDK1.7、Eclipse、ADT17、NDK17、AndroidSDK。
在本游戲開發(fā)過程中使用了Action動(dòng)畫和幀動(dòng)畫,而Cocos2d-x引擎提供了這兩種動(dòng)畫的創(chuàng)建方式。其中Action動(dòng)畫的實(shí)現(xiàn)方式可以簡單描述為:為場景、層、精靈等基本元素添加一個(gè)動(dòng)作,而由元素來操作這個(gè)動(dòng)作完成Action動(dòng)畫。元素操作動(dòng)作時(shí),可以構(gòu)造一個(gè)動(dòng)作序列(Sequence),把幾個(gè)動(dòng)作組合起來放入序列中,統(tǒng)一由元素操作動(dòng)畫播放。而幀動(dòng)畫在很多游戲引擎中都有應(yīng)用。幀動(dòng)畫就是每一幀由一張圖片組成,當(dāng)播放每一幀時(shí)形成一個(gè)完整的動(dòng)畫。在本游戲中,馬里奧跳、飛、登場等動(dòng)畫和敵人攻擊和死亡等動(dòng)畫都是由幀動(dòng)畫來完成的。
在本游戲設(shè)計(jì)過程中,游戲地圖的滾動(dòng)與角色、角色間的碰撞檢測是最大的難點(diǎn),并對(duì)設(shè)計(jì)的成敗起決定性作用。本游戲地圖的創(chuàng)建方式使用了Cocos2d-x支持的開源地圖TileMap(瓦片地圖),重點(diǎn)是實(shí)現(xiàn)多段地圖的連續(xù)滾動(dòng)。地圖滾動(dòng)的實(shí)現(xiàn)思想如下:首先創(chuàng)建兩段地圖,前段已經(jīng)截入畫面,另一段準(zhǔn)備載入畫面。其次根據(jù)當(dāng)前屏幕中第一段地圖的X坐標(biāo)小于0為判斷條件構(gòu)造循環(huán)結(jié)構(gòu)來處理更新地圖。然后再次通過Schedule時(shí)間調(diào)度器去每幀調(diào)用第二步中的方法更新地圖。最后,移除被更新的地圖。
對(duì)于碰撞檢測,Cocos2d-x內(nèi)置的物理引擎攜帶了強(qiáng)大的物理檢測功能,其中也包含了碰撞檢測功能,本游戲采用了物理引擎中的碰撞盒子來進(jìn)行馬里奧與敵人間的碰撞檢測,具體過程為:首先給每個(gè)創(chuàng)建的角色綁定上一個(gè)碰撞盒子。其次,取消碰撞盒子在碰撞時(shí)產(chǎn)生力的效果。最后當(dāng)角色移動(dòng)時(shí),碰撞盒子也在移動(dòng),當(dāng)盒子間產(chǎn)生交點(diǎn),即說明角色間發(fā)生碰撞。
5 游戲測試
游戲RunningMario的測試方法采用黑盒測試[9],基本測試環(huán)境為Windows和Android平臺(tái),主要測試的項(xiàng)目為功能測試、性能測試。首先,進(jìn)入開始界面進(jìn)行每日簽到等相關(guān)操作;其次,進(jìn)入選擇關(guān)卡界面選擇關(guān)卡;再次,進(jìn)入游戲界面闖關(guān);最后,查看闖關(guān)結(jié)算和退出游戲。在各項(xiàng)功能測試及性能測試中,各項(xiàng)指標(biāo)均顯示正常,整個(gè)游戲過程運(yùn)行良好。游戲部分界面如圖2所示。
6 總結(jié)
本文給出使用C++語言,通過Windows系統(tǒng)上的Visual Studio工具,開發(fā)一款基于Cocos2d-x引擎的跑酷類手游的全過程。首先對(duì)Cocos2d-x技術(shù)做了簡要分析,然后結(jié)合軟件工程的思想,對(duì)所開發(fā)游戲做了需求分析。接著對(duì)游戲做了總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)。最后在游戲的開發(fā)實(shí)現(xiàn)階段,介紹了關(guān)鍵功能是如何實(shí)現(xiàn)的,并且給出了部分游戲界面展示,同時(shí)對(duì)游戲進(jìn)行了系統(tǒng)的測試,各測試項(xiàng)均顯示正常。
參考文獻(xiàn):
[1] 滿碩泉. Cocos2d-x權(quán)威指南[M]. 北京:機(jī)械工業(yè)出版社, 2013:17-29.
[2] 陸奎安. 基于Cocos2d-x引擎的跨平臺(tái)游戲設(shè)計(jì)與實(shí)現(xiàn)[D].武漢: 華中科技大學(xué), 2014.
[3] 鐘迪龍. Cocos2d-x游戲開發(fā)之旅[M]. 北京:電子工業(yè)出版社, 2013:15-27.
[4] 徐磊, 范柳青. 淺析3D游戲引擎[J]. 電腦知識(shí)與技術(shù), 2011, 7(17):31-33.
[5] 林羅龍. 電腦游戲設(shè)計(jì)中的平衡策略[J]. 電腦知識(shí)與技術(shù), 2009, 5(21):19-21.
[6] 巴克, 蘭德. 游戲編程中的人工智能技術(shù)[M]. 北京:清華大學(xué)出版社, 2006:17-31.
[7] 姜旭. 手機(jī)游戲, 小屏幕上的大戰(zhàn)場[N]. 中國知識(shí)產(chǎn)權(quán)報(bào), 2012-06-08(11).
[8] Richard, Taylor, Mario Zechner. Beginning Android Games[M]. Apress, 2011:590-592.
[9] 海藩. 軟件工程導(dǎo)論[M]. 北京:清華大學(xué)出版社, 2007:152-179.endprint