石倩倩
(武漢郵電科學(xué)研究院,430074)
目前的智能終端的應(yīng)用開發(fā)技術(shù)作為移動互聯(lián)網(wǎng)鏈上的關(guān)鍵環(huán)節(jié),其關(guān)鍵技術(shù)的突破對于整個產(chǎn)業(yè)鏈健康和快速發(fā)展具有重要意義。智能終端應(yīng)用開發(fā)技術(shù)基本都是針對具體操作系統(tǒng)平臺提供針對性的開發(fā)語言和工具進行開發(fā),開發(fā)者針對一個操作系統(tǒng)開發(fā)應(yīng)用后,需要花費大量的時間和精力進行跨平臺移植工作,導(dǎo)致開發(fā)周期長,開發(fā)門檻高。對于一個公司,甚至?xí)胁煌牟块T去開發(fā)不同操作系統(tǒng)上的應(yīng)用。而對于開發(fā)應(yīng)用的公司來說,這些主流的操作系統(tǒng)都是不能舍棄的,誰也不能預(yù)測未來到底會朝向哪里發(fā)展,同時用戶對于不同操作系統(tǒng)有不同的偏愛,我們無法說明哪一個更好或者更加優(yōu)質(zhì)。以開發(fā)游戲公司為例,要去為每個操作系統(tǒng)分別,單獨的去開發(fā)游戲應(yīng)用來說,代價太高。而基于跨平臺引擎去開發(fā)應(yīng)用能夠大大減少開發(fā)的工作量,成本,以及開發(fā)周期。
如果不使用跨平臺的游戲引擎去開發(fā)游戲,那么必須在不同的平臺,例如android,iOS,blackberry,windows phone 上單獨的去編寫代碼。跨平臺的優(yōu)勢就在于,它大大減小了開發(fā)人員的工作量。在開發(fā)過程中,可以只是用一種語言,同時進行一次編寫工作,再在不同的編譯環(huán)境下去編譯,編譯完成后生成不同運行環(huán)境的文件,就可運行在這些操作系統(tǒng)只上了。
Cocos2d-x 提供的框架外,游戲可以寫在C++或者LUA 中,使用API 和Cocos2d-iPhone 完全兼容。Cocos2d-x 項目可以很容易地建立和運行在iOS,Android,黑莓Blackberry 操作系統(tǒng)和更多操作系統(tǒng)之上。Cocos2d-x 還支持Windows、Mac 和Linux 等桌面操作系統(tǒng),因此,我們可以編寫的源代碼很容易在桌面操作系統(tǒng)中編輯和調(diào)試,也可以很方便的移植進PC,平板,和智能電視中。
作為Cocos2d 的C++版本,目前有大量Cocos2d 的經(jīng)驗分享。C++版本對于非本行業(yè)出身的人來說可能是一種福音。支持iOS、Android、Windows 等平臺,跨平臺開發(fā)者的福音。它是開源免費、易學(xué)易用、龐大的工具鏈支持。
每個平臺有自己的特點,因此開發(fā)過程中有很多需要注意的地方。首先對于開發(fā)語言,Cocos2d-x 目前維護三種語言,C++,JS,C#。C#是專門為Windows phone7 設(shè)計的,這將導(dǎo)致原本用C++寫的代碼,在移植到Windows phone7 上需要做一個簡單的語言翻譯工作,JS 雖然可以跨平臺,但是HTML5 還不夠成熟,在PC 上效率完全很好,但是在手機,平板,智能電視上上則還有很多難題需要解決。
這里給出一款游戲,名為“手指手紙”。該游戲基于Cocos2d-x 來設(shè)計游戲的框架。其思想是以廁所為主題,主頁面就是廁所的場景,不同的設(shè)施就是對于不同的場景的按鈕,當(dāng)點擊馬桶是進入了模式的選擇。在模式場景中,“小試牛刀”、“娛樂自身”和“挑戰(zhàn)極限”對應(yīng)于不同的模式。當(dāng)用戶點擊任意一個模式后將進入游戲主體,出來一定張數(shù)的紙片,“小試牛刀”和“娛樂自身”模式中會記錄消除所有的紙片的時間。時間越少排名將越靠前。在“挑戰(zhàn)極限”模式中是指定的29s 內(nèi)消除的張數(shù),張數(shù)越多排名越靠前。
如上圖所示,一個簡單小游戲,卻有著很復(fù)雜的場景切換,例如結(jié)束場景,會根據(jù)不同情況切換到不同其他場景。如果這種切換工作都交由當(dāng)前場景來完成,也就是在當(dāng)前場景的類的方法中切換到其他場景,調(diào)用方法為“pDirector->replaceScene(pScene)”,顯然,這樣會更加復(fù)雜。而在這里,“手指手紙”游戲使用了一個負(fù)責(zé)管理整個游戲的管理器類。中心管理器幫助我們完成所有的工作。每個場景只負(fù)責(zé)加載層。在每個場景中不需要關(guān)心要切換到哪個場景。
2.2.1 中心管理器類的設(shè)計
下圖為“手指手紙”游戲主體框架的設(shè)計:
圖1“手指手紙”游戲主體框架的設(shè)計
游戲進入中心管理后進行的動作順序為:
加載配置文件。得到關(guān)于聲音的開或關(guān),游戲模式的默認(rèn)選擇,和金幣的數(shù)量等等配置。
進入logo 場景。首先需要加載所有的圖片。
根據(jù)用戶的選擇,切換到不同的場景接口方法。
切換到下一個場景。
場景的返回方法。
存儲和更新所有改變的數(shù)據(jù)。
在3 到6 中進行循環(huán),直到用戶退出游戲。
很顯然,在這個設(shè)計框架中,中心管理器類相當(dāng)于調(diào)度器或分發(fā)器,同網(wǎng)絡(luò)互聯(lián)設(shè)備中路由器的功能一樣。它根據(jù)得到的信號或者值,去判斷進入哪個場景。這樣簡化了場景設(shè)計的復(fù)雜度。也方便了游戲軟件的再度利用。
在AppDelegate.cpp(Cocos2d-x 游戲的通用入口文件)中通過以下代碼進入管理類中,實現(xiàn)進入整個游戲的分發(fā)中心。
在run 方法里面不停的根據(jù)情況調(diào)用切換不同的場景。以下是run 方法實現(xiàn)內(nèi)容:
在這個方法中,首先根據(jù)給定不同的場景ID 去判斷進入不同的場景,然后再在MainScenseRun()等這類方法中進行切換工作。
2.2.2 中心管理器框架設(shè)計的優(yōu)點
通過中心管理器類去調(diào)度和分發(fā)游戲的場景,實現(xiàn)了游戲的可擴展性。當(dāng)需要升級游戲版本,或者添加更多的場景時,利用這樣的管理器類,方便了開發(fā)人員的維護。開發(fā)人員不需要再在其他的場景中進行再次添加和修改,只需要在中心管理器中添加場景的切換借口。
同時,由于很多的游戲都有類似處,例如同樣的logo 場景,類似的排行榜,商店等,當(dāng)開發(fā)另一款游戲時,通過這個中心管理器框架,可以很方便的調(diào)用以前已經(jīng)實現(xiàn)好的場景功能,便于后續(xù)游戲的制作,和移植。
2.3.1 層的概念
CCLayer 是處理玩家觸摸事件的CCNode 子類。它隸屬于場景之下的游戲元素,同時知道怎樣渲染自己??梢孕薷乃耐该鞫龋螒蛲婕揖涂梢钥吹疆?dāng)前層下面的其他層。由于CCLayers 在我們定義游戲的外觀和行為方面非常有用,所以,需要花很多編程時間編寫CCLayer 子類。
2.3.2 游戲中層的設(shè)計
以“手指手紙”游戲為例,場景大致可以分為三層: 背景層:背景圖片
菜單層:中間的各種菜單項
觸摸動作層:實現(xiàn)觸摸以及動作事件
層次結(jié)構(gòu)如圖2 所示:
圖2“手指手紙”游戲場景中層的設(shè)計
當(dāng)手指在屏幕上滑動,如果滑動的是最上面的一個精靈(手指在最上層紙片內(nèi)滑動),精靈跟隨手指的滑動而滑動,如果是紙片滑動一定距離,它將飛速劃出屏幕,并消失。
在場景中,添加了3 個層,定義backGroundLayer 為背景層,buttonLayer 為菜單層,spriteLayer 為觸摸動作層。如下調(diào)用是添加了這三個層次。
this->addChild(backGroundLayer);
this->addChild(buttonLayer);
this->addChild(spriteLayer);
把所有同類型的實現(xiàn)放在同一層次,不同類型的放在不同層次,方便了層與層的隔離。使得了復(fù)雜的場景簡單化。
2.4.1 智能手機中的呈現(xiàn)
“手指手紙”游戲在在經(jīng)過框架的設(shè)計,代碼的編寫,以及3大主流平臺的編譯,生成后,可有效的運行在智能設(shè)備當(dāng)中。以下是游戲在智能手機中運行時的呈現(xiàn)畫面,智能電視,和平板中的運行效果并沒有太大差異。圖3 是游戲的最終實現(xiàn)畫面。其他的排行榜和商店這里沒有列出具體呈現(xiàn)。
圖3“手指手紙”游戲呈現(xiàn)
2.4.2 其他智能設(shè)備的移植
若要呈現(xiàn)在智能電視中和平板電腦中,不同的只是分辨率上的差異,Cocos2d-x 2.0 以上的版本提供了多分辨率的適應(yīng)。因此可以不需要使用多套圖片資源,即能自適應(yīng)進各種分辨率設(shè)備。setDesignResolutionSize()。
這個函數(shù)用于指定一個 OpenGL 視圖,然后將這個視圖映射到設(shè)備屏幕上。根據(jù)不同的設(shè)定,視圖會自動縮放顯示內(nèi)容,為 Cocos2d-x 自適應(yīng)多種分辨率提供了基本支持。
本文以一款游戲為例,介紹了如何使用跨平臺游戲引擎開發(fā),并且提供了基于它開發(fā)游戲的框架。本文使用的跨平臺引擎為Cocos2d-x 游戲引擎。針對不同類型的游戲,通常只需要單獨實現(xiàn)最上層的游戲邏輯系統(tǒng),而剩余的模塊完全可以復(fù)用。本文所提供的游戲框架方便再次使用,同時也更具擴展性。同時還實現(xiàn)了游戲的跨平臺運行,該游戲能良好的運行在iOS, windows phone ,以及android 系統(tǒng)上。讀者可在各平臺應(yīng)用商店下載。
[1] 陸鋼,朱培軍,李慧云,文錦軍:智能終端跨平臺應(yīng)用開發(fā)技術(shù)研究.電信科學(xué)[J],2012,(05)
[2] 百度文庫. 2013Q1 智能手機操作系統(tǒng)的市場排行榜.http://wenku.baidu.com/view/1b9c2e10b52acfc789ebc969.html
[3] 劉劍卓 .Cocos2d-x 游戲開發(fā)技術(shù)精解[M].北京:人民郵電出版,2013.105-108F