計(jì)算機(jī)類(lèi)論文_第1頁(yè)
計(jì)算機(jī)類(lèi)論文_第2頁(yè)
計(jì)算機(jī)類(lèi)論文_第3頁(yè)
計(jì)算機(jī)類(lèi)論文_第4頁(yè)
計(jì)算機(jī)類(lèi)論文_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、唐山師范學(xué)院本科畢業(yè)論文 題 目 基于Android系統(tǒng)的桌球桌球游戲的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 生 楊景崗指導(dǎo)教師 閆敬 副教授年 級(jí) 2010本科班專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)系 別 計(jì)算機(jī)科學(xué)系唐山師范學(xué)院計(jì)算機(jī)科學(xué)系2014年5月鄭重聲明本人的畢業(yè)論文(設(shè)計(jì))是在指導(dǎo)教師 閆敬 的指導(dǎo)下獨(dú)立撰寫(xiě)完成的。如有剽竊、抄襲、造假等違反學(xué)術(shù)道德、學(xué)術(shù)規(guī)范和侵權(quán)的行為,本人愿意承擔(dān)由此產(chǎn)生的各種后果,直至法律責(zé)任,并愿意通過(guò)網(wǎng)絡(luò)接受公眾的監(jiān)督。特此鄭重聲明。畢業(yè)論文(設(shè)計(jì))作者(簽名):年 月 日目 錄標(biāo) 題1摘 要2一.前言2 1.1桌球游戲開(kāi)發(fā)目的2 1.2桌球游戲的背景2 1.3桌球游戲的開(kāi)發(fā)技術(shù)與環(huán)境

2、2二.桌球游戲的需求分析22.1 桌球游戲的策劃22.2 安卓平臺(tái)下桌球游戲開(kāi)發(fā)的準(zhǔn)備工作2三.桌球游戲的設(shè)計(jì)33.1 桌球游戲框架簡(jiǎn)介33.2各個(gè)類(lèi)的簡(jiǎn)要介紹43.2.1. 界面相關(guān)類(lèi)43.2.2. 輔助類(lèi)53.2.3. 常量頭文件53.2.4. 其他類(lèi)及源程序5四.桌球游戲的實(shí)現(xiàn)54.1.界面相關(guān)類(lèi)54.1.1界面管理類(lèi)SceneManager.64.1.2菜單界面類(lèi)MenuLayer64.1.3關(guān)于界面類(lèi)AboutLayer74.1.4幫助界面類(lèi)HelpLayer84.1.5聲音設(shè)置類(lèi)MusicLayer84.1.6桌球游戲模式選擇界面類(lèi)ChoiceLayer104.1.7分?jǐn)?shù)查看界面類(lèi)

3、ScoreLayer104.1.8桌球游戲界面類(lèi)GameLayer114.2. 輔助類(lèi)114.2.1桌球精靈輔助類(lèi)TableBall114.2.2剛體碰撞回調(diào)類(lèi)MyContactListener124.3 其他類(lèi)及源程序134.3.1主程序main134.3.2 場(chǎng)景創(chuàng)建類(lèi)AppDelegate144.4桌球游戲界面展示16五. 結(jié)束語(yǔ)18參考文獻(xiàn)18致 謝20外 文21 基于Android系統(tǒng)的桌球桌球游戲的設(shè)計(jì)與實(shí)現(xiàn)楊景崗 摘 要 隨著安卓平臺(tái)上休閑類(lèi)小桌球游戲變得越來(lái)越豐富,休閑類(lèi)桌球小桌球游戲也變得日漸流行,這類(lèi)桌球游戲不僅操作簡(jiǎn)單而且富有一定的技術(shù)難度,經(jīng)常受到桌球游戲愛(ài)好者的追捧,

4、因此,我們將開(kāi)發(fā)一款基于Android平臺(tái)的體育類(lèi)桌球游戲2D桌球(Billiard_2D).本桌球游戲是一款使用cocos2d-x與Box2d相結(jié)合進(jìn)行圖像渲染的Android平臺(tái)的休閑類(lèi)桌球小桌球游戲,本桌球游戲是基于c+語(yǔ)言開(kāi)發(fā)利用了cocos2d-x中的大量的特效,極大的豐富了桌球游戲的視覺(jué)效果,增強(qiáng)了用戶體驗(yàn),同時(shí)本桌球游戲中的物理模擬用到了cocos2d-x提供的Box2d物理引擎,桌球運(yùn)動(dòng)十分真實(shí),酷炫。 關(guān)鍵詞 安卓 cocos2d-x Box2d 桌球游戲 追捧 一.前言 1.1桌球游戲開(kāi)發(fā)目的 隨著Android手機(jī)的不斷發(fā)展,城市化發(fā)展越來(lái)越快,競(jìng)爭(zhēng)也越來(lái)越大,一款休閑,

5、益智的小桌球游戲已成為當(dāng)今時(shí)代人們緩解壓力的不二選擇,功能也不斷的多樣化,而概要設(shè)計(jì)正是體現(xiàn)出2D桌球的基本概念。學(xué)習(xí)安卓已經(jīng)有了一段時(shí)間,在不斷的學(xué)習(xí)與開(kāi)發(fā)過(guò)程中,對(duì)Android開(kāi)發(fā)平臺(tái)也有了基本的認(rèn)識(shí)。閱讀了一些相關(guān)資料之后,便開(kāi)始了基于Android桌球游戲開(kāi)發(fā)的項(xiàng)目2D桌球,以此來(lái)完成這款桌球游戲。 1.2桌球游戲的背景近年來(lái)社會(huì)生活節(jié)奏不斷加快,人們往往沒(méi)有過(guò)多的時(shí)間來(lái)玩一款大型的桌球游戲,相反越來(lái)越多的人們更加傾向于一些休閑類(lèi)的小桌球游戲,比如現(xiàn)在比較流行的的休閑類(lèi)桌球桌球游戲“3D桌球”, “美式2D桌球”, 因?yàn)槠洚?huà)面豐富精美,桌球游戲可玩性高,在用戶中受到了熱捧。1.3桌球

6、游戲的開(kāi)發(fā)技術(shù)與環(huán)境Android的興起大大擴(kuò)大了移動(dòng)終端的游戲市場(chǎng),也由此產(chǎn)生了一個(gè)迫切的需求,即游戲開(kāi)發(fā)需要同時(shí)部署在兩個(gè)熱門(mén)平臺(tái)上,但是為一個(gè)游戲維護(hù)兩套代碼的代價(jià)是非常昂貴的,尤其是在兩個(gè)平臺(tái)的主流語(yǔ)言,主流引擎還不統(tǒng)一的情況下。因此,基于c+語(yǔ)言,以cocos2diPhone為基礎(chǔ)開(kāi)發(fā)的Cocos2dx出現(xiàn)了,桌球游戲就是在這樣一個(gè)平臺(tái)上產(chǎn)生的,并且此游戲在Eclipse編譯器下編譯而成的。 二.桌球游戲的需求分析 桌球游戲開(kāi)發(fā)的前期準(zhǔn)備工作,主要包含桌球游戲的策劃和桌球游戲中資源的準(zhǔn)備。 2.1 桌球游戲的策劃 桌球游戲的策劃主要包含:桌球游戲類(lèi)型定位、呈現(xiàn)技術(shù)以及目標(biāo)平臺(tái)的確定等

7、工作。 (1)桌球游戲類(lèi)型 該桌球游戲的操作為觸屏,通過(guò)點(diǎn)擊屏幕右下角的“Go”按鈕,擊打母球,通過(guò)觸控改變母球擊球的方向,通過(guò)改變力度條的高度,改變擊打母球的力度,屬于休閑類(lèi)桌球游戲。 (2)運(yùn)行目標(biāo)平臺(tái) 桌球游戲目標(biāo)平臺(tái)為Android2.2及以上版本。桌球游戲中運(yùn)用了大量的cocos2d-x中的粒子系統(tǒng),CPU運(yùn)算速度較慢的設(shè)備運(yùn)行桌球游戲時(shí)桌球游戲效果會(huì)比較差。 (3)操作方式 桌球游戲所有關(guān)于桌球游戲的操作為觸屏,玩家可以操縱球桿的方位,球桿擊打母球的力度,通過(guò)將一種球全部打入洞中,最后將黑八打入洞中從而取得桌球游戲的勝利。 (4)呈現(xiàn)技術(shù) 桌球游戲完全采用cocos2d-x引擎進(jìn)行

8、桌球游戲場(chǎng)景的搭建和桌球游戲特效的處理,比如桌球游戲中的進(jìn)洞效果、各個(gè)界面之間多變的切換效果,用Box2d引擎進(jìn)行物理的碰撞模擬,比如球之間的碰撞,球與邊界之間的碰撞等,這些功能是cocos2d-x中所獨(dú)有的,用起來(lái)簡(jiǎn)單方便,但所呈現(xiàn)的效果卻非常強(qiáng)大,cocos2d-x的這種方便高效的特點(diǎn),極大地增強(qiáng)了玩家的桌球游戲體驗(yàn)。 2.2 安卓平臺(tái)下桌球游戲開(kāi)發(fā)的準(zhǔn)備工作 進(jìn)行開(kāi)發(fā)前的準(zhǔn)備工作,包括搜集和制作圖片、聲音等,其詳細(xì)開(kāi)發(fā)步驟如下。 (1)首先為讀者介紹的是本桌球游戲中用到的圖片資源,系統(tǒng)將所有圖片資源都放在項(xiàng)目文件下的Resources/pic文件夾下,如表1-1所列。表2-1 圖片清單圖

9、 片 名大小(KB)像素(wxh)用 途about.png83504*299關(guān)于圖片aim_down.png6.2666*51模式切換按鈕aim_up.png6.7351*56模式切換按鈕ball00.png ball152.png4.3224*24桌球圖片bg1.png138800*480背景圖片1bg2.png119610*407背景圖片2bg3.png105600*400背景圖片3bmp.png71.6500*300排行榜背景圖片breakmark.png3.0791*91Go按鈕圖片choice0.pngchoice2.png8.5991*91Go按鈕圖片go_normal.png5.

10、89189*50選中桌球游戲按鈕go_select.png81.2500*300裝飾背景help1.png141800*480幫助圖片1Help2.png12319*56幫助圖片2left_normal.png5.99103*59左微調(diào)按鈕圖片left_select.png5.88103*59選擇左微調(diào)按鈕圖片line.png6.17855*2線圖片lineBall.png3.7424*24線球圖片lose.png52.7350*88失敗字樣圖片menu_background.png280800*480菜單界面背景圖片menu0.png menu4.png35.5200*161菜單界面按鈕圖片

11、number0.png number10.png36.720*32時(shí)間數(shù)組組合圖片off.png8.01110*80關(guān)閉開(kāi)關(guān)on.png7.94110*80打開(kāi)開(kāi)關(guān)pointer.png3.2830*30指針圖片right_normal.png6.07103*60右微調(diào)按鈕圖片right_select.png5.99103*60選中右微調(diào)按鈕圖片ruler.png7.32100*230能量條圖片ruler_inner.png6.0740*220能量條內(nèi)部圖片score_back1.png289800*480分?jǐn)?shù)背景1score_back2.png222800*480分?jǐn)?shù)背景2stars.png

12、1.0532*32粒子系統(tǒng)圖片subline_down.png6.2966*51輔助線按鈕圖片subline_up.png3.3266*51選中輔助線按鈕圖片tableCue.png8.15341*13臺(tái)球圖片vector.png49.6350*88勝利字樣圖片yinxiaoguan .png273*8027.1音效關(guān)圖片yinxiaokai.png273*8026.1音效開(kāi)圖片yinyueguan.png273*8025.9音樂(lè)關(guān)圖片yinyuekai.png273*8024.8音樂(lè)開(kāi)圖片 (2)接下來(lái)介紹桌球游戲中用到的聲音資源,系統(tǒng)將聲音資源放在項(xiàng)目目錄中的Resources/sound

13、文件夾下,其詳細(xì)情況如表1-2所列。表2-2 聲音清單聲音文件名大小(KB)格 式用 途backsound.mp31249.28mp3桌球游戲的背景音樂(lè)ballin.mp336.3mp3桌球進(jìn)洞音效fire.mp349.3mp3爆炸的音效gameover.mp389.4mp3失敗音效hit.mp335.1mp3桌球之間的碰撞音效shoot.mp333.8mp3球桿擊打母球音效win.mp3112mp3桌球游戲勝利音效 (3)最后介紹桌球游戲中用到的pList文件,系統(tǒng)將List資源放在項(xiàng)目目錄中的Resources/pic文件夾下,其詳細(xì)情況如表1-3所列。表2-3 粒子系統(tǒng)文件清單粒子系統(tǒng)文

14、件名大小(KB)格 式用 途ExplodingRing.plist9.2plist失敗界面粒子特效 三.桌球游戲的設(shè)計(jì)桌球游戲的架構(gòu)包括界面相關(guān)類(lèi)、輔助類(lèi)、常量頭文件、桌球游戲控制類(lèi)和工具類(lèi)等。 3.1 桌球游戲框架簡(jiǎn)介 桌球游戲的整體架構(gòu)介紹,桌球游戲框架如圖1-13和圖1-14所示。圖3-1桌球游戲框架圖說(shuō)明:圖1-13中列出的為主程序、場(chǎng)景創(chuàng)建類(lèi)、以及桌球游戲界面類(lèi),其各自功能以及具體實(shí)現(xiàn)將在后續(xù)詳細(xì)介紹,讀者這里不必深究。圖1-14是桌球游戲開(kāi)發(fā)中用到的輔助類(lèi)、常量頭文件,輔助類(lèi)主要用于創(chuàng)建桌球以及進(jìn)行剛體碰撞時(shí)的處理,常量頭文件用于存儲(chǔ)桌球游戲需要的一些常量。圖3-2 輔助類(lèi)、常量頭

15、文件 按照程序運(yùn)行的順序逐步介紹各個(gè)類(lèi)的作用以及整體的運(yùn)行框架. (1)啟動(dòng)桌球游戲,首先通過(guò)main入口進(jìn)入整個(gè)程序的,然后進(jìn)入第一個(gè)場(chǎng)景菜單場(chǎng)景界面MenuLayer,在該界面上主要有5個(gè)按鈕從左到右依次為“關(guān)于“按鈕,“幫助“按鈕,“開(kāi)始桌球游戲“按鈕,“設(shè)置“按鈕,“退出“按鈕,通過(guò)觸屏滑動(dòng)操作能使按鈕左右移動(dòng),點(diǎn)擊相應(yīng)的按鈕會(huì)執(zhí)行相應(yīng)的操作。 (2)點(diǎn)擊“關(guān)于”按鈕后進(jìn)入關(guān)于界面,該界面主要負(fù)責(zé)介紹此桌球游戲的名稱(chēng),版本號(hào),版權(quán)所有者等,點(diǎn)通過(guò)擊手機(jī)的“返回鍵“按鈕能夠返回到主菜單界面。 (3)點(diǎn)擊“幫助”按鈕后進(jìn)入幫助界面,該界面主要負(fù)責(zé)介紹此桌球游戲的玩法,通過(guò)控制球桿的方向與力

16、的大小將同類(lèi)桌球擊打進(jìn)洞,同時(shí)介紹了桌球游戲的微調(diào)按鈕,模式轉(zhuǎn)換按鈕,輔助線按鈕等。 (4)點(diǎn)擊“開(kāi)始桌球游戲”按鈕后進(jìn)入桌球游戲模式選擇界面。 (5)點(diǎn)擊桌球游戲選擇模式界面的“計(jì)時(shí)模式”按鈕后進(jìn)入桌球游戲?yàn)榈褂?jì)時(shí)模式,點(diǎn)擊“練習(xí)模式”按鈕后進(jìn)入桌球游戲?yàn)榫毩?xí)模式,點(diǎn)擊“排行榜”按鈕后進(jìn)入得分界面,該界面顯示的是玩家在計(jì)時(shí)模式中取得勝利的日期、分?jǐn)?shù)等,通過(guò)觸屏的上下滑動(dòng)控制記錄的滑動(dòng),方便玩家查看歷史記錄。 (6)在菜單界面點(diǎn)擊“設(shè)置“按鈕,會(huì)跳轉(zhuǎn)到聲音設(shè)置界面MusicLayer,該界面主要是進(jìn)行桌球游戲過(guò)程中的背景音樂(lè)與音效播放標(biāo)志位的設(shè)置,點(diǎn)擊手機(jī)的返回鍵按鈕返回菜單界面。 (7)在菜

17、單界面點(diǎn)擊“退出“按鈕,退出整個(gè)應(yīng)用程序。 3.2各個(gè)類(lèi)的簡(jiǎn)要介紹3.2.1. 界面相關(guān)類(lèi)(1)界面管理類(lèi)SceneManager 該類(lèi)為桌球游戲程序中管理各個(gè)界面的類(lèi),主要負(fù)責(zé)創(chuàng)建并規(guī)定第一個(gè)界面,然后實(shí)現(xiàn)從當(dāng)前界面跳轉(zhuǎn)到其他界面的方法,所以界面管理類(lèi)是coco2d-x程序中必須有的一個(gè)類(lèi)。(2)菜單界面類(lèi)MenuLayer 該類(lèi)為菜單界面類(lèi),從左到右依次為“關(guān)于“按鈕,“幫助“按鈕,“開(kāi)始桌球游戲“按鈕,“設(shè)置“按鈕,“退出“按鈕,通過(guò)觸屏滑動(dòng)操作能使按鈕左右 移動(dòng),點(diǎn)擊相應(yīng)的按鈕會(huì)執(zhí)行相應(yīng)的操作。(3)關(guān)于界面類(lèi)AboutLayer 該類(lèi)為關(guān)于界面類(lèi),該界面主要負(fù)責(zé)介紹此桌球游戲的名稱(chēng),

18、版本號(hào),版權(quán)所有者等,通過(guò)點(diǎn)擊手機(jī)的“返回鍵“按鈕能夠返回到主菜單界面。(4)幫助界面類(lèi)HelpLayer 該類(lèi)為幫助界面類(lèi),該界面主要負(fù)責(zé)介紹此桌球游戲的玩法,通過(guò)控制球桿的方向與力的大小將同類(lèi)桌球擊打進(jìn)洞,同時(shí)介紹了桌球游戲的微調(diào)按鈕,模式轉(zhuǎn)換按鈕,輔助線按鈕等。(5)聲音設(shè)置類(lèi)MusicLayer 該類(lèi)為聲音設(shè)置界面類(lèi),該界面主要負(fù)責(zé)設(shè)置桌球游戲過(guò)程中背景音樂(lè)與音效的播放,該層為MenuLayer的子層,共有4個(gè)按鈕,為“off“按鈕與”on“按鈕,通過(guò)點(diǎn)擊聲音控制按鈕開(kāi)關(guān),控制聲音播放。(7)桌球游戲模式選擇類(lèi)ChoiceLayer 該類(lèi)為桌球游戲模式選擇類(lèi),該界面有3個(gè)按鈕,點(diǎn)擊“計(jì)

19、時(shí)模式“按鈕,進(jìn)入計(jì)時(shí)模式,點(diǎn)擊”練習(xí)模式“按鈕,進(jìn)入練習(xí)模式,點(diǎn)擊”排行榜“按鈕,進(jìn)入分?jǐn)?shù)查看界面。(8)分?jǐn)?shù)查看界面類(lèi)ScoreLayer 該類(lèi)為分?jǐn)?shù)查看界面,該界面主要記錄玩家在計(jì)時(shí)模式勝利時(shí)的時(shí)間與分?jǐn)?shù),通過(guò)上下滑動(dòng)能夠讓歷史記錄精靈上下滑動(dòng),方便玩家查看歷史記錄。(9)桌球游戲界面類(lèi)GameLayer 該類(lèi)為桌球游戲界面類(lèi),實(shí)現(xiàn)了主桌球游戲場(chǎng)景的搭建,桌球游戲中所有的精靈對(duì)象都添加到該層之上,并進(jìn)行顯示,玩家通過(guò)觸控對(duì)球桿進(jìn)行操作,通過(guò)點(diǎn)擊按鈕擊打白色桌球。3.2.2. 輔助類(lèi)(1)桌球類(lèi)TableBall 該類(lèi)為桌球類(lèi),主要負(fù)責(zé)創(chuàng)建桌球,初始化桌球的索引號(hào),桌球的圖片等,并實(shí)現(xiàn)了根

20、據(jù)桌球速度不斷為桌球換紋理圖的功能,與檢測(cè)是否需要?jiǎng)h除桌球,播放進(jìn)洞特效的方法。(2)剛體碰撞回調(diào)類(lèi)MyContactListener 該類(lèi)為剛體碰撞回調(diào)類(lèi),主要負(fù)責(zé)進(jìn)行剛體之間碰撞的處理,在創(chuàng)建物理世界的時(shí)候?yàn)槲锢硎澜缂由洗吮O(jiān)聽(tīng),剛體碰撞的時(shí)候就會(huì)調(diào)用此類(lèi)中重寫(xiě)的父類(lèi)方法,主要是進(jìn)行音效播放的處理。3.2.3. 常量頭文件主要介紹本桌球游戲的中用到的一些常量,這些常量都存儲(chǔ)在相關(guān)的頭文件中桌球游戲的常量頭文件AppMacros,該頭文件中定義并創(chuàng)建了圖片、個(gè)體,定義了程序的標(biāo)準(zhǔn)分辨率和場(chǎng)景中一些精靈的層次。桌球游戲的第二個(gè)常量頭文件JNIUtil,在該頭文件進(jìn)行數(shù)據(jù)信息的存儲(chǔ),與取出。桌球游

21、戲的第三個(gè)常量頭文件GameInfo,在該頭文件進(jìn)行桌球游戲中一些常用數(shù)據(jù)的定義,例如球臺(tái)的位置等個(gè)點(diǎn)構(gòu)成封閉的線段,menuItemPosition為MenuLayer界面5個(gè)按鈕的坐標(biāo)信息。 說(shuō)明:將桌球游戲中桌球,球臺(tái)等的位置信息放入頭文件中,方便管理,提高了程序的可維護(hù)性。如果以后用到關(guān)卡設(shè)計(jì)器的話,也可以直接利用這些數(shù)據(jù)進(jìn)行關(guān)卡設(shè)計(jì),簡(jiǎn)潔方便。 (1)頭文件AppMacros 該頭文件中定義并創(chuàng)建了圖片、聲音套裝的結(jié)構(gòu)體,并定義了程序的標(biāo)準(zhǔn)分辨率和場(chǎng)景中一些精靈的層次,聲明了桌球游戲中經(jīng)常用到的常量。(2)頭文件JNIUtil 該頭文件的主要作用是通過(guò)JNI與java端sdk的pre

22、ference相連,將一些簡(jiǎn)單數(shù)據(jù)存儲(chǔ),并在需要的時(shí)候取出存儲(chǔ)在editor中的數(shù)據(jù),主要存儲(chǔ)背景音樂(lè)與音效播放的標(biāo)志,與分?jǐn)?shù)、日期等。(3)頭文件GameInfo 該頭文件中定義了桌球的半徑,整個(gè)物理世界與繪制的縮放比,球臺(tái)的長(zhǎng)與寬,母球的初始位置,能量條的位置,按鈕的位置,指針的位置以及邊界的24個(gè)點(diǎn)坐標(biāo)等。3.2.4. 其他類(lèi)及源程序(1)主程序main 該主程序?yàn)槌绦虻娜肟?,?dāng)程序運(yùn)行時(shí)會(huì)從此進(jìn)入,然后執(zhí)行cocos2d-x程序。(2)場(chǎng)景創(chuàng)建類(lèi)AppDelegate 該類(lèi)為場(chǎng)景創(chuàng)建類(lèi),主要負(fù)責(zé)創(chuàng)建桌球游戲場(chǎng)景的導(dǎo)演并初始化第一個(gè)場(chǎng)景,然后加載桌球游戲用到的所用聲音資源,并實(shí)現(xiàn)程序進(jìn)入

23、前臺(tái)或者后臺(tái)時(shí)的回調(diào)方法。 四.桌球游戲的實(shí)現(xiàn) 4.1.界面相關(guān)類(lèi) 桌球游戲的界面相關(guān)類(lèi),首先是桌球游戲界面的管理者,然后是桌球游戲的各個(gè)界面是如何開(kāi)發(fā)的,從而逐步完成對(duì)桌球游戲界面的開(kāi)發(fā),下面就對(duì)這些類(lèi)的開(kāi)發(fā)進(jìn)行詳細(xì)的介紹。 4.1.1界面管理類(lèi)SceneManager. 桌球游戲的界面管理者SceneManager類(lèi),該類(lèi)的主要作用是管理各個(gè)界面,然后創(chuàng)建第一個(gè)界面,并實(shí)現(xiàn)從當(dāng)前界面跳轉(zhuǎn)到其他界面的方法,其類(lèi)具體的開(kāi)發(fā)步驟如下。 (1)首先給出的是SceneManager類(lèi)的頭文件代碼,該頭文件中聲明了本類(lèi)中所需要的方法和各個(gè)場(chǎng)景的指針,其詳細(xì)代碼如下。1#ifndef _SceneMan

24、ager_H_2 #define _SceneManager_H_3#include cocos2d.h4using namespace cocos2d;/使用命名空間5class SceneManager6public:7 cocos2d:CCScene* createScene(); /創(chuàng)建第一個(gè)對(duì)象的方法8CCScene *menuScene; /菜單場(chǎng)景的引用9CCScene *gameScene; /桌球游戲?qū)ο蟮囊?0void goMenuLayer(); /創(chuàng)建場(chǎng)景對(duì)象的方法11void goGameLayer(bool isdaojishi); /去桌球游戲界面的方法12;1

25、3#endif說(shuō)明:上述代碼為SceneManager類(lèi)的頭文件,在該頭文件中聲明了桌球游戲中所有界面的指針,并聲明了創(chuàng)建桌球游戲第一個(gè)場(chǎng)景的方法和切換到其它界面的方法。 (2)然后給出的是SceneManager類(lèi)的具體代碼,在該類(lèi)中實(shí)現(xiàn)了創(chuàng)建第一個(gè)場(chǎng)景的方法和切換,具體實(shí)現(xiàn)步驟請(qǐng)查看SceneManager.cpp. 4.1.2菜單界面類(lèi)MenuLayer 桌球游戲的的菜單界面,該界面中有五個(gè)按鈕,玩家通過(guò)點(diǎn)擊屏幕中不同功能的按鈕實(shí)現(xiàn)不同的界面的切換以及桌球游戲的退出。 (1)首先是MenuLayer類(lèi)的頭文件代碼,該頭文件聲明了本類(lèi)需要的按鈕、精靈、指針、變量和按鈕的回調(diào)方法,其詳細(xì)代碼

26、在MenuLayer.h.1#ifndef _MenuLayer_H_2#define _MenuLayer_H_3#include cocos2d.h/引入頭文件4#include SceneManager.h/引入頭文件5using namespace cocos2d;/使用命名空間6class MenuLayer : public CCLayer7public:8virtual bool init();/初始化的方法9virtual void keyBackClicked(); /返回鍵監(jiān)聽(tīng)的回調(diào)方法10virtual void registerWithTouchDispatcher(v

27、oid);/觸控的注冊(cè)回調(diào)方法11/從父類(lèi)繼承來(lái)的觸控按下的方法12virtual bool ccTouchBegan(cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);13/從父類(lèi)繼承來(lái)的觸控移動(dòng)的方法14virtual void ccTouchMoved(cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);15/從父類(lèi)繼承來(lái)的觸控結(jié)束的方法16virtual void ccTouchEnded(cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);

28、17/從父類(lèi)繼承來(lái)的觸控取消的方法18virtual void ccTouchCancelled(cocos2d:CCTouch *pTouch,cocos2d:CCEvent *pEvent);19CREATE_FUNC(MenuLayer);/資源的釋放20public:21void initButton();/初始化按鈕的方法22void aboutCallback(CCObject* pSender);/關(guān)于按鈕的回調(diào)方法23void helpCallback(CCObject* pSender);/幫助按鈕的回調(diào)方法24void startCallback(CCObject* pSe

29、nder); /開(kāi)始桌球游戲按鈕的回調(diào)方法25void setCallback(CCObject* pSender); /音效設(shè)置按鈕的回調(diào)方法26void exitCallback(CCObject* pSender);/退出按鈕的回調(diào)方法27void recoverSet(CCObject* pSender);/恢復(fù)設(shè)置28public:29float distance_X; /x移動(dòng)距離30int index;/當(dāng)前是第幾個(gè)按鈕31int menuCount;/按鈕數(shù)組大小32SceneManager* bsm;/場(chǎng)景管理器33CCSize visibleSize;/獲取可見(jiàn)區(qū)域尺寸34

30、CCPoint origin;/獲取可見(jiàn)區(qū)域原點(diǎn)坐標(biāo)35CCPoint startPoint;/記錄起始點(diǎn)擊的點(diǎn)36 cocos2d:CCMenu* pMenu;/菜單按鈕37 cocos2d: CCMenuItemImage* nMenu; /當(dāng)前選中的按鈕38 CCArray *menuArray; /按鈕列表39;40#endif 說(shuō)明:第818行依次為初始化的方法、返回鍵監(jiān)聽(tīng)的回調(diào)方法以及重寫(xiě)的父類(lèi)的與觸控相的代碼,第2127行依次為初始化按鈕的方法,以及菜單界面按鈕的回調(diào)方法。第2840行依次為,x方向移動(dòng)距離、當(dāng)前按鈕選項(xiàng),按鈕數(shù)組大小、場(chǎng)景管理器、可見(jiàn)區(qū)域尺寸、原點(diǎn)坐標(biāo)、起始點(diǎn)點(diǎn)

31、擊點(diǎn)坐標(biāo)、菜單按鈕,當(dāng)前選中按鈕、按鈕列表等變量的聲明。 (2)MenuLayer類(lèi)的具體代碼,在該類(lèi)中創(chuàng)建了背景和所有的按鈕,并為其設(shè)置了出場(chǎng)特效、然后實(shí)現(xiàn)了所有按鈕的回調(diào)方法,首先要介紹的是本類(lèi)的第一部分init方法,此方法用于初始化布景、常用變量、按鈕和一些相關(guān)資源,請(qǐng)查看MenuLayer.cpp。 4.1.3關(guān)于界面類(lèi)AboutLayer 桌球游戲的關(guān)于界面,該界面用于介紹桌球游戲名稱(chēng)、版本號(hào)以及版權(quán)所有者,該界面開(kāi)發(fā)起來(lái)比較簡(jiǎn)單,其具體的開(kāi)發(fā)步驟如下。 (1)首先是AboutLayer類(lèi)的頭文件代碼,其主要定義了回調(diào)方法,按鈕,場(chǎng)景管理器的引用,可見(jiàn)區(qū)域大小,可見(jiàn)區(qū)域原點(diǎn)坐標(biāo),以

32、及背景精靈,其詳細(xì)代碼AboutLayer.h。1#ifndef _AboutLayer_H_2#define _AboutLayer_H_3#include cocos2d.h /導(dǎo)入頭文件4class AboutLayer : public cocos2d:CCLayer/自定義的布景類(lèi)5public:6 virtual bool init(); /初始化的方法7virtual void keyBackClicked();/返回鍵監(jiān)聽(tīng)的回調(diào)方法8 CREATE_FUNC(AboutLayer);/最后為初始與釋放資源9;10#endif說(shuō)明:上述代碼主要為初始化關(guān)于界面的方法包括初始化的i

33、nit方法與返回鍵監(jiān)聽(tīng)的回調(diào)方法keyBackClicked,最后為初始與釋放資源。 (2)然后是AboutLayer類(lèi)的具體代碼,其詳細(xì)代碼請(qǐng)查看AboutLayer.cpp。 4.1.4幫助界面類(lèi)HelpLayer 桌球游戲的幫助界面,該界面用于介紹桌球游戲的玩法,與其他界面相比,該界面開(kāi)發(fā)起來(lái)比較簡(jiǎn)單。 (1)首先是HelpLayer類(lèi)的頭文件代碼,其主要定義了回調(diào)方法,按鈕,場(chǎng)景管理器的引用,可見(jiàn)區(qū)域大型,可見(jiàn)區(qū)域原點(diǎn)坐標(biāo),以及背景精靈,其詳細(xì)代碼在HelpLayer.h。1#ifndef _HelpLayer_H_2#define _HelpLayer_H_3#include coc

34、os2d.h/導(dǎo)入頭文件4using namespace cocos2d;/使用命名空間5class HelpLayer : public cocos2d:CCLayer/自定義的布景類(lèi)6public:7 virtual bool init();/初始化的方法8virtual void keyBackClicked();/返回鍵監(jiān)聽(tīng)的回調(diào)方法9virtual void registerWithTouchDispatcher(void);/觸控的注冊(cè)回調(diào)方法10/從父類(lèi)繼承來(lái)的觸控按下的方法11virtual bool ccTouchBegan(cocos2d:CCTouch *pTouch,

35、cocos2d:CCEvent *pEvent);12/從父類(lèi)繼承來(lái)的觸控移動(dòng)的方法13virtual void ccTouchMoved(cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);14/從父類(lèi)繼承來(lái)的觸控結(jié)束的方法15virtual void ccTouchEnded(cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);16/從父類(lèi)繼承來(lái)的觸控取消的方法17virtual void ccTouchCancelled(cocos2d:CCTouch *pTouch,cocos2d:CCEv

36、ent *pEvent);18 /設(shè)置觸控是否可用19void changeTouchEnable(CCObject* pSender);20CCSprite* help1;/第一張幫助圖片21CCSprite* help2;/第二章幫助圖片22int count;/計(jì)數(shù)器23 CREATE_FUNC(HelpLayer);/初始化與釋放資源24;25#endif說(shuō)明:上述代碼為HelpLayer類(lèi)的頭文件,在該頭文件中聲明了HelpLayer類(lèi)中需要的初始化方法與觸控的回調(diào)方法,并定義了幫助背景精靈。 (2)HelpLayer類(lèi)的具體代碼,主要是創(chuàng)建背景精靈,玩法圖片精靈并實(shí)現(xiàn)了返回鍵的回調(diào)

37、方法,其詳細(xì)代碼請(qǐng)查看HelpLayer.cpp. 4.1.5聲音設(shè)置類(lèi)MusicLayer 桌球游戲的的聲音設(shè)置界面,該界面用于設(shè)置桌球游戲過(guò)程中的背景音樂(lè)播放與音效設(shè)置,與其他界面相比,該界面開(kāi)發(fā)起來(lái)比較簡(jiǎn)單,其具體的開(kāi)發(fā)步驟如下。(1)首先是MusicLayer類(lèi)的頭文件,該頭文件中聲明了本類(lèi)用到的所有方法和定時(shí)回調(diào)方法,以及精靈、變量、按鈕等,其詳細(xì)代碼目錄下的MusicLayer.h。1#ifndef _MusicLayer_h2#define _MusicLayer_h3#include cocos2d.h/導(dǎo)入頭文件4#include AppMacros.h/導(dǎo)入頭文件5usin

38、g namespace cocos2d;/使用命名空間6class MusicLayer: public CCLayer7public:8CCMenu* pMenu;/菜單按鈕9CCMenuItemImage* soundon;/創(chuàng)建聲音按鈕10CCMenuItemImage* soundclose;/創(chuàng)建聲音按鈕11CCMenuItemImage* effecton;/創(chuàng)建音效按鈕12CCMenuItemImage* effectclose;/創(chuàng)建音效按鈕13CCSprite* soundon1; /對(duì)應(yīng)精靈14CCSprite* soundclose1;/對(duì)應(yīng)精靈15CCSprite* e

39、ffecton1;/對(duì)應(yīng)精靈16CCSprite* effectclose1;/對(duì)應(yīng)精靈17public:18 MusicLayer();/初構(gòu)函數(shù)19 MusicLayer();/析構(gòu)函數(shù)20 virtual bool init();/初始化方法21 void initDialog();/初始化按鈕的方法22 virtual void keyBackClicked(); /返回鍵監(jiān)聽(tīng)23 void menuCallbacKOpenMusic(); /打開(kāi)聲音24 void menuCallbackCloseMusic(); /關(guān)閉聲音25 void menuCallbackOpengEffe

40、ct(); /打開(kāi)音效26 void menuCallbackCloseEffect();/關(guān)閉音效27 CREATE_FUNC(MusicLayer);/初始化以及資源的釋放28;29#endif 說(shuō)明:第816行為聲音設(shè)置界面按鈕以及精靈等變量的聲明,具體包括菜單按鈕,聲音開(kāi)關(guān)、音效開(kāi)關(guān)按鈕以及每個(gè)按鈕在顯示時(shí)其左側(cè)對(duì)應(yīng)的精靈圖片等。第1828行為聲音設(shè)置界面中方法的聲明,具體包括初構(gòu)與析構(gòu)函數(shù),初始化按鈕的方法,返回鍵監(jiān)聽(tīng)的回調(diào)方法,以及界面中按鈕按下時(shí)的回調(diào)方法等。 (2)MusicLayer類(lèi)的具體代碼,關(guān)于該類(lèi)的方法框架在上述頭文件中聲明方法的部分已經(jīng)全部列出。首先是本類(lèi)中用于初始

41、化按鈕以及背景精靈initDialog方法,其詳細(xì)代碼見(jiàn)MusicLayer.cpp. (3)下面是MusicLayer界面返回鍵的回調(diào)方法與打開(kāi)聲音按鈕的回調(diào)方法,其詳細(xì)代碼如MusicLayer.cpp1void MusicLayer:keyBackClicked()/返回鍵監(jiān)聽(tīng)的回調(diào)方法2MenuLayer* menuLayer = (MenuLayer*)this-getParent();/獲取的父類(lèi)3this-removeFromParentAndCleanup(false);/從父類(lèi)中移除該層4menuLayer-setKeypadEnabled(true);/開(kāi)啟返回鍵監(jiān)聽(tīng)5me

42、nuLayer-setTouchEnabled(true);/開(kāi)啟觸控監(jiān)聽(tīng)6menuLayer-nMenu-setEnabled(true);/設(shè)置按鈕可用78void MusicLayer:menuCallbacKOpenMusic()/打開(kāi)聲音開(kāi)關(guān)回調(diào)方法9CocosDenshion:SimpleAudioEngine:sharedEngine()-pauseBackgroundMusic();10JNIUtil:saveInt(musicFlag,0);/設(shè)置聲音播放的標(biāo)志位11soundon-setVisible(false);/設(shè)置按鈕的可見(jiàn)性12soundon1-setVisibl

43、e(false);/設(shè)置精靈的可見(jiàn)性13soundclose-setVisible(true);/設(shè)置按鈕的可見(jiàn)性14soundclose1-setVisible(true);/設(shè)置精靈的可見(jiàn)性15 說(shuō)明:第17行為返回鍵監(jiān)聽(tīng)的回調(diào)方法,首先獲取該層的父類(lèi),然后從父類(lèi)中刪除該層,接下來(lái)開(kāi)啟父類(lèi)的返回鍵監(jiān)聽(tīng)、觸控監(jiān)聽(tīng),最后設(shè)置父類(lèi)的按鈕菜單可用。第815行為打開(kāi)聲音開(kāi)關(guān)的回調(diào)方法,首先暫停音樂(lè)的播放,然后將音樂(lè)播放的標(biāo)志位變成0,最后設(shè)置對(duì)應(yīng)按鈕與按鈕對(duì)應(yīng)精靈的可見(jiàn)性。 4.1.6桌球游戲模式選擇界面類(lèi)ChoiceLayer 桌球游戲模式選擇界面類(lèi),從該界面能選擇不同的桌球游戲模式與查看排行榜,

44、與其他界面相比,該界面開(kāi)發(fā)起來(lái)比較簡(jiǎn)單. (1)首先是ChoiceLayer類(lèi)的頭文件,在該頭文件中聲明了ChoiceLayer類(lèi)中需要的初始化方法、返回鍵監(jiān)聽(tīng)的回調(diào)方法、按鈕的回調(diào)方法,并定義了菜單按鈕指針代碼在ChoiceLayer.h。1#ifndef _ChoiceLayer_H_2#define _ChoiceLayer_H_3#include cocos2d.h/導(dǎo)入頭文件4class ChoiceLayer : public cocos2d:CCLayer/自定義的布景類(lèi)5public:6 virtual bool init();/初始化的方法7virtual void keyB

45、ackClicked();/返回鍵監(jiān)聽(tīng)的回調(diào)方法8void initBuuton();/初始化按鈕的方法9void choice0Callback();/choice0按鈕的回調(diào)方法10void choice1Callback();/choice1按鈕的回調(diào)方法11void choice2Callback();/choice2按鈕的回調(diào)方法12cocos2d:CCMenu* p_menu;/菜單按鈕指針13 CREATE_FUNC(ChoiceLayer);14;15#endif說(shuō)明:上述代碼為ChoiceLayer類(lèi)的頭文件,在該頭文件中聲明了ChoiceLayer類(lèi)中需要的初始化方法、返回

46、鍵監(jiān)聽(tīng)的回調(diào)方法、按鈕的回調(diào)方法,并定義了菜單按鈕指針。 (2)下面介紹ChoiceLayer類(lèi)的具體代碼,關(guān)于該類(lèi)的方法框架在上述頭文件中聲明方法的部分已經(jīng)全部列出,下面不再介紹該類(lèi)的框架,該類(lèi)的詳細(xì)代碼見(jiàn)桌球游戲代碼ChoiceLayer.cpp. 4.1.7分?jǐn)?shù)查看界面類(lèi)ScoreLayer 桌球游戲的分?jǐn)?shù)查看界面類(lèi),該界面用于查看玩家在計(jì)時(shí)模式中取得勝利的日期與得分,與其他界面相比,該界面開(kāi)發(fā)起來(lái)比較簡(jiǎn)單,其具體的開(kāi)發(fā)步驟如下。 (1)首先是ScoreLayer類(lèi)的頭文件,在該頭文件中聲明了ScoreLayer類(lèi)中需要的初始化方法、返回鍵監(jiān)聽(tīng)的回調(diào)方法、按鈕的回調(diào)方法,在該頭文件中定義

47、了該類(lèi)中用到的初始化界面精靈的方法以及變量,并聲明了ScoreLayer類(lèi)中觸摸的回調(diào)方法 (2)然后是ScoreLayer類(lèi)的具體代碼,關(guān)于該類(lèi)的方法框架在上述頭文件中聲明方法的部分已經(jīng)全部列出。首先要是本類(lèi)的第一部分init方法,此方法用于初始化布景和一些相關(guān)資源,其詳細(xì)代碼請(qǐng)查看ScoreLayer.cpp. (3)初始化該界面中時(shí)間、得分精靈的initAll_Info方法,其詳細(xì)代碼ScoreLayer.cpp。 (4)分?jǐn)?shù)查詢界面的初始化圖片的方法inTexture,返回鍵監(jiān)聽(tīng)方法keyBackClicked以及重新的CCTouchMove方法,其詳細(xì)代碼查看ScoreLayer.c

48、pp。4.1.8桌球游戲界面類(lèi)GameLayer 桌球游戲的分?jǐn)?shù)查看界面類(lèi),該界面用于查看玩家在計(jì)時(shí)模式中取得勝利的日期與的得分,其他界面相比,該界面開(kāi)發(fā)起來(lái)比較簡(jiǎn)單,其具體的開(kāi)發(fā)步驟如下。 (1)首先給出的是GameLayer類(lèi)的頭文件,在該頭文件中聲明了GameLayer類(lèi)中需要的初始化方法、返回鍵監(jiān)聽(tīng)的回調(diào)方法、按鈕的回調(diào)方法,定時(shí)回調(diào)方法等,其詳細(xì)代碼如下。 (2)然后是上面省略的頭文件中變量的聲明等。 (3)GameLayer類(lèi)的具體代碼,關(guān)于該類(lèi)的方法框架在上述頭文件中聲明方法的部分已經(jīng) 全部列出,下面不再介紹該類(lèi)的框架。首先要介紹的是本類(lèi)的析構(gòu)函數(shù)與初構(gòu)函數(shù),此方法用于刪除場(chǎng)景銷(xiāo)

49、毀時(shí)堆中的對(duì)象與初始化布景和一些相關(guān)資源包括初始化背景的initBackGround方法 ,倒計(jì)時(shí)模式下初始化數(shù)字的initTimerSprite方法,初始化圖片名稱(chēng)的方法initPname、初始化圖片的方法initCCTexture2D、初始化物理世界等的方法,創(chuàng)建剛體的createb2Body方法。 (4)接下來(lái)介紹GameLayer類(lèi)中各個(gè)按鈕的回調(diào)方法,進(jìn)行物理模擬update的回調(diào)方法,GameLayer類(lèi)中進(jìn)行物理模之后,所有剛體速度小于閾值之后的回調(diào)方法afterBallStopCallback,GameLayer類(lèi)中重寫(xiě)的ccTouchMoved方法以及計(jì)算球桿旋轉(zhuǎn)角度以及前進(jìn)

50、方法的方法calculate_tableCue。 (5)GameLayer類(lèi)中計(jì)算球線的calculate_Line_Total方法,GameLayer類(lèi)中計(jì)算距離球線最近桌球的方法calculateBall與計(jì)算從母球發(fā)出的輔助線的長(zhǎng)度的方法,計(jì)算距計(jì)算第二根輔助線的方法方法calculate_Line2_ASSIST。 4.2. 輔助類(lèi) 上面是桌球游戲的所有界面,接下來(lái)是該桌球游戲的輔助類(lèi),本程序的輔助類(lèi)有TableBall類(lèi)、MyContactListener類(lèi)。 4.2.1桌球精靈輔助類(lèi)TableBall 桌球精靈輔助類(lèi)TableBall,該類(lèi)用于創(chuàng)建一個(gè)一個(gè)桌球,具體包括桌球的編號(hào),桌球位移信息,起始點(diǎn)坐標(biāo),精靈對(duì)應(yīng)的剛體等其具體的開(kāi)發(fā)步驟如下。 (1)TableBall類(lèi)的頭文件代碼,這部分代碼比較簡(jiǎn)單,用于聲明和定義本類(lèi)中需要的方法、變量等,其主要代碼TableBall.h。1#ifndef _TableBall_H_2#define _TableBall_H_3#include cocos2d.h /導(dǎo)入頭文件4#include string

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論