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