




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 畢畢 業(yè)業(yè) 設(shè)設(shè) 計(jì)計(jì)題目題目基于基于 Cocos2D-XCocos2D-X 的跨平臺(tái)游戲的設(shè)計(jì)與實(shí)現(xiàn)的跨平臺(tái)游戲的設(shè)計(jì)與實(shí)現(xiàn)姓 名 學(xué) 號(hào) 系(院) 班 級(jí) 指導(dǎo)教師 職 稱 二 O 一四 年 五 月 二十 日 畢業(yè)設(shè)計(jì)(論文)答辯評(píng)審表畢業(yè)設(shè)計(jì)(論文)答辯評(píng)審表課題名稱課題名稱基于基于 Cocos2d-X 的跨平臺(tái)游戲的設(shè)計(jì)與實(shí)現(xiàn)的跨平臺(tái)游戲的設(shè)計(jì)與實(shí)現(xiàn)學(xué)生姓名學(xué)生姓名 指導(dǎo)教師指導(dǎo)教師簽名簽名答辯小組答辯小組評(píng)分評(píng)分評(píng)語(yǔ):評(píng)語(yǔ):答辯小組負(fù)責(zé)人簽字:答辯小組負(fù)責(zé)人簽字:年年 月月 日日答辯答辯小組小組成員成員簽簽 名名畢業(yè)設(shè)計(jì)(論文)成績(jī)?cè)u(píng)定表畢業(yè)設(shè)計(jì)(論文)成績(jī)?cè)u(píng)定表指導(dǎo)教師評(píng)分(指導(dǎo)
2、教師評(píng)分(30分)分)評(píng)閱人評(píng)分(評(píng)閱人評(píng)分(30 分)分)答辯評(píng)分(答辯評(píng)分(40 分)分)綜合成績(jī)綜合成績(jī)答辯委員會(huì)負(fù)責(zé)人簽字:答辯委員會(huì)負(fù)責(zé)人簽字:年年 月月 日日淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)目目 錄錄第一章緒論 .41.1 手游背景.41.2 發(fā)展趨勢(shì).41.3 研究意義.41.4 不足之處.5第二章相關(guān)技術(shù) .62.1 C+語(yǔ)言.62.2 COCOS2D-X 平臺(tái)技術(shù)介紹 .62.3 開(kāi)發(fā)工具 .7第三章設(shè)計(jì)概要 .83.1 游戲介紹.83.2 游戲的結(jié)構(gòu)例圖 .83.3 功能模塊分析圖 .103.3.1 游戲歡迎頁(yè)面.103.3.2 游戲主頁(yè)面.103.4 游戲失敗 .11第四章
3、項(xiàng)目設(shè)計(jì) .124.1 游戲架構(gòu)設(shè)計(jì).12第五章項(xiàng)目實(shí)現(xiàn) .135.1 游戲總體實(shí)現(xiàn) .135.2 各模塊實(shí)現(xiàn) .135.2.1 功能的實(shí)現(xiàn)依賴 .135.2.2 游戲主歡迎頁(yè)的實(shí)現(xiàn).135.2.3 游戲主場(chǎng)景 .155.2.4 游戲主角類(lèi) .165.2.5 敵機(jī)類(lèi) .175.2.6 敵機(jī)管理.195.2.7 觸摸事件.225.2.8 游戲結(jié)束場(chǎng)景.23第六章學(xué)習(xí)心得 .24第七章項(xiàng)目總結(jié)與展望 .25參考文獻(xiàn) .26淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)1第第 1 1 章章 緒論緒論1.11.1 手游背景手游背景手游指在手機(jī)等各類(lèi)手持硬件設(shè)備上運(yùn)行的游戲類(lèi)應(yīng)用程序,其需要具備一定硬件環(huán)境和一定系統(tǒng)級(jí)
4、程序作為運(yùn)行基礎(chǔ)。2004 年,手機(jī)游戲均為 WAP 游戲,到 2005 年,圖形化手機(jī)游戲激增,已經(jīng)超過(guò) 40 余 款。2005 年 6 月,盛大英特爾宣布攜手共同開(kāi)發(fā)國(guó)內(nèi)手機(jī)游戲市場(chǎng),手機(jī)網(wǎng)游行業(yè)陣營(yíng)開(kāi)始空前壯大,繼盛大、北京掌訊、美通之后,網(wǎng)易、空中,標(biāo)派等也紛 紛加入,目前國(guó)內(nèi)手機(jī)游戲廠商已經(jīng)近 30 家。手機(jī)游戲尚處于市場(chǎng)導(dǎo)入期,在未來(lái)幾年內(nèi),手機(jī)游戲?qū)⒉饺肟焖侔l(fā)展階段。1.21.2 發(fā)展趨勢(shì)發(fā)展趨勢(shì)近年來(lái),隨著智能機(jī)的普及以及 3G 的覆蓋率增加,手機(jī)網(wǎng)游日益興起,現(xiàn)已經(jīng)有近兩千萬(wàn)的手機(jī)網(wǎng)游玩家了。2014 年,國(guó)內(nèi)移動(dòng)互聯(lián)網(wǎng)競(jìng)爭(zhēng)格局未定,運(yùn)營(yíng)商拒絕管道化欲謀更多話語(yǔ)權(quán),轉(zhuǎn)型力度、
5、資源投入日趨加大;在部分細(xì)分領(lǐng)域,圍繞運(yùn)營(yíng)商轉(zhuǎn)型的業(yè)務(wù)和渠道價(jià) 值驟然放大,引發(fā)產(chǎn)業(yè)整合日趨頻繁。在此背景下,國(guó)內(nèi)移動(dòng)互聯(lián)龍頭拓維信息通過(guò)多年技術(shù)積累及運(yùn)營(yíng)商渠道優(yōu)勢(shì),確定以手機(jī)動(dòng)漫與游戲業(yè)務(wù)為兩大核心發(fā)展方 向之一。1.31.3 研究意義研究意義全球在使用的移動(dòng)電話已經(jīng)超過(guò) 10 億部,而且這個(gè)數(shù)字每天都在不斷增加。在除美國(guó)外的各個(gè)發(fā)達(dá)國(guó)家,手機(jī)用戶都比計(jì)算機(jī)用戶多。手機(jī)游戲潛在的市場(chǎng)比其他任何平臺(tái),比如 PlayStation 和 GameBoy 都要大。在控制臺(tái)游戲時(shí)代,GameBoy 熱銷(xiāo)的一個(gè)原因就是便攜性人們可以隨時(shí)隨 地沉浸在自己喜歡的游戲中,還可以隨時(shí)隨地?fù)屬?gòu)自己喜歡的裝備或?qū)?/p>
6、物。和游戲控制臺(tái)或者 PC 相比,手機(jī)雖然可能不是一個(gè)理想的游戲設(shè)備,但畢竟人們總是隨 時(shí)隨身攜帶,這樣手機(jī)游戲很可能成為人們消遣時(shí)間的首選。手機(jī)便攜性、移動(dòng)性的特征更能滿足用戶隨時(shí)隨地玩游戲的需求,用戶利用排隊(duì)、等車(chē)的時(shí)間進(jìn)行游 戲,手機(jī)游戲碎片化的特性凸顯。調(diào)查顯示,29.8%的用戶在用手機(jī)玩游戲以后電腦端玩游戲的時(shí)間減少,手機(jī)游戲已經(jīng)開(kāi)始搶奪電腦游戲時(shí)間。22.4%的 用戶手機(jī)游戲時(shí)間越來(lái)越長(zhǎng),僅有 10%的用戶時(shí)間變短,手機(jī)游戲已逐漸成為一種普遍的娛樂(lè)方式。因?yàn)槭謾C(jī)是網(wǎng)絡(luò)設(shè)備,在一定限制因素下可以實(shí)現(xiàn)多人在線游戲。隨著移動(dòng)網(wǎng)絡(luò)的發(fā)展,移 動(dòng)游戲也越來(lái)越多的被大家接受,對(duì)于之前長(zhǎng)期通知市
7、場(chǎng)的掌機(jī)來(lái)淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)2說(shuō)造成了不少的沖擊。市場(chǎng)研究公司 IDC 和 App Annie 報(bào)告顯示 2013 年第一季度 iOS和 Android 平臺(tái)游戲業(yè)務(wù)營(yíng)收是掌機(jī)的 3 倍。手機(jī)游戲市場(chǎng)潛力大,投入資金少,吸引了很多市場(chǎng)進(jìn)入者,但中小 SP 在激烈的競(jìng)爭(zhēng)中生存問(wèn)題是需要考慮的主要問(wèn)題。手機(jī)游戲開(kāi)發(fā)商、游戲應(yīng)及服務(wù)提供商不重視市場(chǎng)宣傳和推廣工作,忽視對(duì)于游戲產(chǎn)品,用戶的體驗(yàn)和習(xí)慣培養(yǎng)重要性。手機(jī)游戲市場(chǎng)競(jìng)爭(zhēng)激烈,該競(jìng)爭(zhēng)涉及國(guó)內(nèi),也涉及國(guó)外游戲開(kāi)發(fā)商。追求低成本和短期利益,現(xiàn)游戲產(chǎn)品的質(zhì)量粗糙。手機(jī)游戲的同質(zhì)化也越來(lái)越嚴(yán)重,創(chuàng)新力不足。淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)3 第
8、第 2 2 章章 相關(guān)設(shè)計(jì)相關(guān)設(shè)計(jì)2.12.1 C+C+語(yǔ)言語(yǔ)言C+語(yǔ)言是一種使用非常廣泛的計(jì)算機(jī)編程語(yǔ)言。是一種靜態(tài)數(shù)據(jù)類(lèi)型檢查的、支持多重編程范式的通用程序設(shè)計(jì)語(yǔ)言。它支持過(guò)程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。C+在一定程度上可以和 C 語(yǔ)言很好的結(jié)合,甚至大多數(shù) C 語(yǔ)言程序是在 C+的集成開(kāi)發(fā)環(huán)境中完成的。C+相對(duì)眾多的面向?qū)ο蟮恼Z(yǔ)言,具有相當(dāng)高的性能。C+引入了面向?qū)ο蟮母拍睿沟瞄_(kāi)發(fā)人機(jī)交互類(lèi)型的應(yīng)用程序更為簡(jiǎn)單、快捷。很多優(yōu)秀的程序框架包括 MFC、QT 就是使用的 C+。C+避免平臺(tái)限定或沒(méi)有普遍用途的特性。C+不使用會(huì)帶來(lái)額外開(kāi)銷(xiāo)的特性。
9、C+設(shè)計(jì)成無(wú)需復(fù)雜的程序設(shè)計(jì)環(huán)境。2.22.2 Cocos2D-XCocos2D-X 平臺(tái)技術(shù)介紹平臺(tái)技術(shù)介紹cocos2d 是一個(gè)基于 MIT 協(xié)議的開(kāi)源框架,用于構(gòu)建游戲、應(yīng)用程序和其他圖形界面交互應(yīng)用。這是一個(gè) C+ Cocos2d-iPhone 項(xiàng)目的版本。Cocos2d-X 發(fā)展的重點(diǎn)是圍繞Cocos2d 跨平臺(tái),Cocos2d-x 提供的框架。手機(jī)游戲,可以寫(xiě)在 C+或者 Lua 中,使用API 是 Cocos2d-iPhone 完全兼容。Cocos2d-x 項(xiàng)目可以很容易地建立和運(yùn)行在IOS,Android,黑莓 Blackberry 等操作系統(tǒng)中。Cocos2d-x 還支持 W
10、indows、Mac 和Linux 等桌面操作系統(tǒng),因此,開(kāi)發(fā)者編寫(xiě)的源代碼很容易在桌面操作系統(tǒng)中編輯和調(diào)試。Cocos2D-X 主要功能:流程控制(Flow control):非常容易地管理不同場(chǎng)景(scenes)之間的流程控制;精靈(Sprites):快速而方便的精靈;動(dòng)作(Actions):告訴精靈們?cè)撟鍪裁???山M合的動(dòng)作如移動(dòng)(move) 、旋轉(zhuǎn)(rotate)和縮放(scale)等更多;特效(Effects):特效包括波浪(waves) 、旋轉(zhuǎn)(twirl)和透鏡(lens)等更多;平面地圖(Tiled Maps):支持包括矩形和六邊形平面地圖;轉(zhuǎn)換(Transitions):從一個(gè)
11、場(chǎng)景移動(dòng)到另外一個(gè)不同風(fēng)格的場(chǎng)景;菜單(Menus):創(chuàng)建內(nèi)部菜單;文本渲染(Text Rendering):支持標(biāo)簽和 HTML 標(biāo)簽動(dòng)作;文檔(Documents):編程指南 + API 參考 + 視頻教學(xué) + 很多教用戶如何使用的簡(jiǎn)單測(cè)試?yán)?;MIT 許可:盡管用就是了;基于 Pyglet:沒(méi)有外部的依賴;基于 OpenGL:支持硬件加速;3D 對(duì)象:MD2 模型支持;腳本語(yǔ)言:支持 Lua,JavaScript 語(yǔ)言。淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)4圖 2.2 Cocos2D-X 引擎架構(gòu)2.32.3 開(kāi)發(fā)工具開(kāi)發(fā)工具游戲在 Windows XP 系統(tǒng)下開(kāi)發(fā),基于 visual stu
12、dio C+ 2008 的開(kāi)發(fā)平臺(tái),采用了cocos2d-x 技術(shù)進(jìn)行開(kāi)發(fā)。操作系統(tǒng):Microsoft Windows 7程序語(yǔ)言:C+開(kāi)發(fā)工具:Microsoft Visval Studio 2012,cocos2d-x-2.2.2Microsoft Visual C+, (簡(jiǎn)稱 Visual C+、MSVC、VC+或 VC)微軟公司的 C+開(kāi)發(fā)工具,具有集成開(kāi)發(fā)環(huán)境,可提供編輯 C 語(yǔ)言,C+以及 C+等編程語(yǔ)言。Visual C+以擁有“語(yǔ)法高亮” ,IntelliSense(自動(dòng)編譯功能)以及高級(jí)除錯(cuò)功能而著稱。比如,它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯
13、被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加鏈接著稱。這些特征明顯縮短程序編輯、編譯及鏈接的時(shí)間花費(fèi),在大型軟件計(jì)劃上尤其顯著。C+語(yǔ)言是目前面向?qū)ο缶幊痰氖走x語(yǔ)言,學(xué)習(xí)、使用C+語(yǔ)言并進(jìn)行應(yīng)用程序設(shè)計(jì)的人員非常多,Microsoft 公司的 Visual C+2008 因其強(qiáng)大的功能、非常友好的界面而成為當(dāng)前最為熱門(mén)C+語(yǔ)言開(kāi)發(fā)環(huán)境。Visual C+提供的集成開(kāi)發(fā)環(huán)境、MFC 類(lèi)庫(kù)和應(yīng)用程序框架極大地便利了用C+語(yǔ)言開(kāi)發(fā) Windows 應(yīng)用程序所需的源代碼編寫(xiě)、用戶界面設(shè)計(jì)、消息映射、編譯鏈接和調(diào)試運(yùn)行等工作。第第 3 3 章章 設(shè)計(jì)概要
14、設(shè)計(jì)概要3.3.1 1 游戲介紹游戲介紹這是一款飛行射擊類(lèi)游戲,整體環(huán)境主要還是圍繞太空為主,高保真的音效,為玩家呈現(xiàn)一場(chǎng)不一樣射擊體驗(yàn)。簡(jiǎn)單的觸屏操 作,觸屏按住隨意一個(gè)地方,左右移動(dòng),便可自動(dòng)攻擊敵人,上下移動(dòng)亦可躲避強(qiáng)敵。在飛機(jī)的左下角還有兩個(gè)道具槽,直接點(diǎn)淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)5擊就可以發(fā)動(dòng)道具效果,前提是你必 須要吃到道具。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機(jī),在敵機(jī)身前發(fā)動(dòng)攻擊。在擊毀敵機(jī)的同時(shí)獲得分?jǐn)?shù),擊毀的敵機(jī)越多,則相對(duì)的獲得分?jǐn)?shù)就越高。玩家進(jìn)行游戲的時(shí)候需要注意不能被敵機(jī)及敵機(jī)子彈碰到,否則玩家控制角色死亡,同時(shí)游戲結(jié)束。記錄玩家獲取的積分。3.3.2 2 游戲的結(jié)
15、構(gòu)例圖游戲的結(jié)構(gòu)例圖游戲的結(jié)構(gòu)例圖如圖 3.2 所示:圖 3.2游戲的結(jié)構(gòu)圖例圖3.33.3 功能模塊分析功能模塊分析圖圖游戲功能模塊主體分析:淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì).1 游戲歡迎頁(yè)面游戲歡迎頁(yè)面游戲歡迎頁(yè)面主要是預(yù)加載游戲進(jìn)行需要的圖片、音樂(lè)等資源進(jìn)行預(yù)加載。3.3.2 游戲主頁(yè)面游戲主頁(yè)面游戲主頁(yè)面邏輯判斷如圖 3.3 所示。圖 3.3游戲主頁(yè)面邏輯判斷圖道具使用邏輯圖如下:淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)7圖 3.3 道具使用邏輯圖3.43.4 游戲失敗游戲失敗游戲失敗邏輯圖圖 3.4 游戲失敗邏輯圖淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)8第第 4 4 章章 項(xiàng)目設(shè)計(jì)項(xiàng)目
16、設(shè)計(jì)4.14.1 游戲架構(gòu)設(shè)計(jì)游戲架構(gòu)設(shè)計(jì)由項(xiàng)目的需求分析可以清晰的對(duì)本游戲的具體功能實(shí)現(xiàn)進(jìn)行設(shè)計(jì),如下圖 4.1 是本游戲的總體架構(gòu)設(shè)計(jì)。圖 4.1 游戲總體構(gòu)架設(shè)計(jì)通過(guò)對(duì)游戲的需求進(jìn)行分析和細(xì)致的歸納,可以認(rèn)為游戲的主要內(nèi)容是由游戲進(jìn)行時(shí)和游戲失敗兩個(gè)主要部分所構(gòu)成。游戲進(jìn)行時(shí)包含了用戶對(duì)主角的操作以及對(duì)主角信息(獲得的分?jǐn)?shù)及獲取的道具)的管理,用戶游戲結(jié)束的操作選擇,游戲進(jìn)行為本系統(tǒng)的設(shè)計(jì)核心?;谶@些考慮,本游戲?qū)?duì)游戲進(jìn)行時(shí)的事件作為一個(gè)重點(diǎn)的功能模塊進(jìn)行詳細(xì)設(shè)計(jì)。淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)9第第 5 5 章章 項(xiàng)目實(shí)現(xiàn)項(xiàng)目實(shí)現(xiàn)前四章是對(duì)游戲的邏輯和功能上的設(shè)計(jì),而游戲?qū)崿F(xiàn)階段就
17、要依據(jù)之前的成果將抽象化設(shè)計(jì)轉(zhuǎn)化為物理實(shí)現(xiàn)。5.15.1 游戲總體實(shí)現(xiàn)游戲總體實(shí)現(xiàn)游戲的模塊結(jié)構(gòu)是對(duì)游戲的進(jìn)行一個(gè)總體劃分,要真正的實(shí)現(xiàn)游戲,還需要進(jìn)一步的設(shè)計(jì)用戶的功能。游戲的功能分為十類(lèi):游戲主場(chǎng)景、游戲歡迎頁(yè)、游戲主角類(lèi)、游戲敵機(jī)類(lèi)、子彈類(lèi)、游戲場(chǎng)景類(lèi)、游戲結(jié)束場(chǎng)景類(lèi)、管理類(lèi)、道具類(lèi)、觸摸事件,針對(duì)每一個(gè)功能都實(shí)現(xiàn)了不同的作用。5.25.2 各模塊實(shí)現(xiàn)各模塊實(shí)現(xiàn)本文對(duì)貨單管理模塊、個(gè)人信息管理模塊、系統(tǒng)信息管理模塊中的功能具體實(shí)現(xiàn)過(guò)程進(jìn)行論述。.1 功能功能的實(shí)現(xiàn)的實(shí)現(xiàn)依賴依賴項(xiàng)目創(chuàng)建的時(shí)候需要添加 cocos2d-x 的支持項(xiàng),如圖 5.2.1,圖 5.2.1搭建好的工
18、程在第一次創(chuàng)建項(xiàng)目的時(shí)候會(huì)自動(dòng)把需要的外部依賴項(xiàng)添加到項(xiàng)目下,不需要手動(dòng)額外添加。需要注意的是,在開(kāi)始一個(gè)項(xiàng)目的時(shí)候,要把需要用到的圖片資源以及音樂(lè)添加到項(xiàng)目目錄下,否則在項(xiàng)目進(jìn)行的過(guò)程中會(huì)報(bào)錯(cuò)。資源文件盡量不要用中文命名,有時(shí)會(huì)出現(xiàn)字符編碼的錯(cuò)誤。.2 游戲主歡迎頁(yè)的實(shí)現(xiàn)游戲主歡迎頁(yè)的實(shí)現(xiàn)用戶在進(jìn)去游戲的時(shí)候,會(huì)首先進(jìn)入到歡迎頁(yè)面(圖 ) 。淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)10圖 歡迎頁(yè)是為了對(duì)資源,即圖片資源和音樂(lè)資源進(jìn)行預(yù)加載,圖片資源和音樂(lè)資源相對(duì)較大,進(jìn)入游戲后在加載比較慢,對(duì)游戲體驗(yàn)會(huì)造成一定影響,所以在歡迎頁(yè)面進(jìn)行預(yù)加載,進(jìn)入游戲后可以享
19、受較好的體驗(yàn),不會(huì)因?yàn)榧虞d資源而造成游戲卡的問(wèn)題。加載資源代碼如下:/加載音樂(lè)資源PreloadMusic();void WelcomeLayer:PreloadMusic()CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadBackgroundMusic(sound/game_music.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/bullet.mp3);CocosDenshion:SimpleAudioEngine:sharedEng
20、ine()-preloadEffect(sound/enemy1_down.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/enemy2_down.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/enemy3_down.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/game_over.mp3);CocosDe
21、nshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/get_bomb.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/get_double_laser.mp3);淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)11CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/use_bomb.mp3);CocosDenshion:SimpleAudioEngine:sharedE
22、ngine()-preloadEffect(sound/big_spaceship_flying.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/achievement.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/out_porp.mp3);CocosDenshion:SimpleAudioEngine:sharedEngine()-preloadEffect(sound/button.mp3);Co
23、cosDenshion:SimpleAudioEngine:sharedEngine()-playBackgroundMusic(sound/game_music.mp3,true);這是做一個(gè)檢測(cè),可以不添加,但是為了保證代碼的健壯性要添加:bool bRet=false;doCC_BREAK_IF(!CCLayer:init();、bRet=true; while (0);return bRet;.3 游戲主場(chǎng)景游戲主場(chǎng)景游戲主場(chǎng)景是為添加的精靈提供一個(gè)層,所有的精靈都是在這個(gè)層上進(jìn)行添加。5.2.4 游戲主角類(lèi)游戲主角類(lèi)創(chuàng)建游戲主角后,然他在進(jìn)入游戲后閃爍三次,主角在進(jìn)行
24、飛行的時(shí)候讓尾巴的煙火一長(zhǎng)一短,顯示正在飛行,這里是通過(guò)兩個(gè)圖片不斷交替顯示完成的。/創(chuàng)建 CCBlink 效果CCBlink *blink=CCBlink:create(1,3);/CCAnimation* animation=CCAnimation:create();淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)12/通過(guò).png 和 .plist文件創(chuàng)建精靈表/animation-addSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCache()-spriteFrameByName(hero1.png);/animation-addSpriteFrame
25、(CCSpriteFrameCache:sharedSpriteFrameCache()-spriteFrameByName(hero2.png);/從本地文件系統(tǒng)中加載圖片文件到CCSpriteFrame中區(qū),然后添加到CCAnimation中for (int i = 1; i addSpriteFrameWithFileName(szImageFileName);CC_BREAK_IF(!animation);animation-setDelayPerUnit(0.1f);CCAnimate* animate=CCAnimate:create(animation);plane-runAct
26、ion(blink);plane-runAction(CCRepeatForever:create(animate);主角在飛行的時(shí)候會(huì)發(fā)射子彈,所以要添加子彈,同時(shí)發(fā)射子彈的時(shí)候還有子彈的音效CocosDenshion:SimpleAudioEngine:sharedEngine()-playEffect(sound/bullet.mp3);CCSprite* bullet=CCSprite:createWithSpriteFrameName(bullet1.png);bulletBatchNode-addChild(bullet);/this-addChild(bullet);this-m
27、_pAllBullet-addObject(bullet);CCPoint planePosition=PlaneLayer:sharedPlane-getChildByTag(AIRPLANE)-getPosition();CCPoint bulletPosition=ccp(planePosition.x,planePosition.y+PlaneLayer:sharedPlane-getChildByTag(AIRPLANE)-getContentSize().height/2);bullet-setPosition(bulletPosition);float length=CCDire
28、ctor:sharedDirector()-getWinSize().height+bullet-getContentSize().height/2-bulletPosition.y;float velocity=320/1;/320pixel/secfloat realMoveDuration=length/velocity;CCFiniteTimeAction* actionMove=CCMoveTo:create(realMoveDuration,ccp(bulletPosition.x,CCDirector:淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)13sharedDirector()-getWi
29、nSize().height+bullet-getContentSize().height/2);CCFiniteTimeAction* actionDone=CCCallFuncN:create(this,callfuncN_selector(BulletLayer:bulletMoveFinished);CCSequence* sequence=CCSequence:create(actionMove,actionDone,NULL);bullet-runAction(sequence);由于子彈的發(fā)射是有間隔的,設(shè)置一個(gè)schedule,有規(guī)律的調(diào)用AddBullet函數(shù),是子彈發(fā)射;v
30、oid BulletLayer:StartShoot(float delay)this-schedule(schedule_selector(BulletLayer:AddBullet),0.20f,kCCRepeatForever,delay);void BulletLayer:StopShoot()this-unschedule(schedule_selector(BulletLayer:AddBullet);5.2.5 敵機(jī)類(lèi)敵機(jī)類(lèi)游戲里要有敵人,添加敵機(jī),敵機(jī)要根據(jù)時(shí)間添加, ,防止出現(xiàn)一大群敵機(jī)同時(shí)出現(xiàn)/初始化bool CWXEnemyManager:Init( CCTexture2
31、D* pTexture,float fSpeed,int nCD,int nScore,int nHp,Receiver* pReceiver )do/對(duì)敵人的屬性賦值m_nScore = nScore;m_nHp = nHp;m_pReceiver = pReceiver;m_nCD = nCD;m_nCDTime = m_nCD;m_pTexture = pTexture;m_fSpeed = fSpeed;return true; while (false);CCLog(Fun EnemyManager:Init Error!);淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)14return false
32、;/判斷是否創(chuàng)建敵人void CWXEnemyManager:EnemyManagerLoop()if (IsCreate()Create();/更新創(chuàng)建敵人時(shí)間bool CWXEnemyManager:IsCreate()if (m_nCD=0)m_nCD = m_nCDTime;return true;elsem_nCD-;return false;/根據(jù)敵人屬性創(chuàng)建敵人void CWXEnemyManager:Create()CCSize PlaneSize = m_pTexture-getContentSize();EnemyForCreateMsg Info;Info.nScore
33、= m_nScore;Info.nHp = m_nHp;Info.pTexture = m_pTexture;Info.fSpeed = m_fSpeed;/為了不讓敵機(jī)產(chǎn)生一半在屏幕外的情況。Info.pStartPoint = CCPointMake(rand()%(int)(_SCREEN_WIDTH_ - PlaneSize.width)+ PlaneSize.width*0.5,_SCREEN_HEIGHT_-1.f);/發(fā)消息創(chuàng)建敵人this-SendMsg(enMsgEnemyForCreate,&Info,sizeof(Info);淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)155.
34、2.6 敵機(jī)管理敵機(jī)管理敵機(jī)與主角子彈碰撞后,要做碰撞檢測(cè)。同時(shí)發(fā)送消息消除敵機(jī),將發(fā)生了碰撞的敵機(jī)進(jìn)行回收,把碰撞的子彈和敵機(jī)存入 CCArray 中,移除碰撞的子彈和敵機(jī)void GameScene:detectionCrash()CCArray* bulletsToDelete = CCArray:create();/創(chuàng)建一個(gè)CCArray,用以存放待刪除的子彈,也就是此幀中被檢測(cè)到碰撞的子彈 bulletsToDelete-retain();/必須調(diào)用retain,CCArray內(nèi)部調(diào)用了autoReleaseCCObject* bt,*et;CCArray* ene
35、myToDelete = CCArray:create();/創(chuàng)建一個(gè)CCArray,用以存放待刪除的敵機(jī),也就是此子彈擊中的敵機(jī)enemyToDelete-retain();/調(diào)用retain CCRect rectHero = this-heroLayer-getHero()-boundingBox();float x = rectHero.origin.x + rectHero.size.width * 0.3;float y = rectHero.origin.y + rectHero.size.height * 0.4;float width = rectHero
36、.size.width * 0.3;float height = rectHero.size.height * 0.6;CCRect rect_HeroForCrash = CCRectMake(x, y, width, height);/檢測(cè)敵機(jī)和hero是否相撞CCARRAY_FOREACH(this-enemyLayer-m_enemys,et)/遍歷所有敵機(jī)/break;Enemy* enemy = (Enemy*)et;if (enemy-getLife() = 0)break;/ CCPoint rect1 = this-heroLayer-getHero()-getPositio
37、n();/boundingBox 獲取的是相對(duì)于父節(jié)點(diǎn)的左下角為原點(diǎn)的一個(gè)rect,所以要比較兩個(gè)精靈是否相交,他們的父節(jié)點(diǎn)的坐標(biāo)原點(diǎn)和大小應(yīng)該一樣if(enemy-boundingBox().intersectsRect(rect_HeroForCrash)this-heroLayer-setIsHeroLive(false);this-heroLayer-setHeroLifes(this-heroLayer-getHeroLifes() - 1);淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)16enemyLayer-stopTakeEnemy();enemyLayer-bomb(enemy);enem
38、yLayer-removeAllEnmeys();SimpleAudioEngine:sharedEngine()-pauseBackgroundMusic();int tempHightScore = GameScene:getHightestScore();if (this-m_totalScore tempHightScore)GameScene:saveHightestScore(this-m_totalScore);char life64;sprintf(life, %d, this-heroLayer-getHeroLifes();CCLabelTTF* lbLife = (CCL
39、abelTTF*)this-getChildByTag(tagOfLife);lbLife-setString(life);this-heroLayer-heroBomb(0.1f);if (this-heroLayer-getHeroLifes() = 0)this-scheduleOnce(schedule_selector(GameScene:gameOverCallback), 2.0f);elsethis-scheduleOnce(schedule_selector(GameScene:newLife), 2.0f);return;/檢測(cè)敵機(jī)和子彈是否相撞CCARRAY_FOREAC
40、H(this-heroLayer-getBullets()-m_bullets,bt)/遍歷所有子彈CCSprite* bullet = (CCSprite*)bt;CCARRAY_FOREACH(this-enemyLayer-m_enemys,et)/遍歷所有敵機(jī)Enemy* enemy3 = (Enemy*)et;if(enemy3-boundingBox().intersectsRect(bullet-boundingBox()淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)17if (enemy3-getLife() 1)enemy3-loseLife();bulletsToDelete-addObj
41、ect(bullet);/把待刪除子彈放入CCArray else if (enemy3-getLife() = 1)enemy3-loseLife();bulletsToDelete-addObject(bullet);/把待刪除子彈放入CCArray enemyToDelete-addObject(enemy3);/把待刪除敵機(jī)放入CCArray this-m_totalScore += enemy3-getScore();char str120;sprintf(str1, %d,(int)this-m_totalScore);CC
42、LabelTTF* label1 = (CCLabelTTF*)this-getChildByTag(tagOfScore);label1-setString(str1);CCARRAY_FOREACH(enemyToDelete,et)/遍歷所有此幀中碰撞死亡的敵機(jī),必須是死亡CCSprite* enemy3 = (CCSprite*)et;this-enemyLayer-bomb(enemy3);/執(zhí)行爆炸enemyToDelete-release();/releaseCCARRAY_FOREACH(bulletsToDelete,bt)/遍歷所有此幀中碰撞的子彈CCSprite* bul
43、let = (CCSprite*)bt;this-heroLayer-getBullets()-removeBullet(bullet);/執(zhí)行移除bulletsToDelete-release();/release淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)18bullet 是加到 ccspriteBatchNode 上的,ccspriteBatchNode 是加到 BulletLayer 上面的,ccspriteBatchNode 和 bulletLayer 都是鋪滿屏幕的。所以子彈調(diào)用 boundingbox 獲得的矩形是以屏幕左下角為原點(diǎn)的。敵機(jī)的原理也是如此。hero 是直接加到 herolaye
44、r 上的,父節(jié)點(diǎn)同樣是鋪滿屏幕的,所以他們的父節(jié)點(diǎn)的左下角的坐標(biāo)都一樣的,這就是通過(guò) boundingbox 檢測(cè)他們是否碰撞的前提。有些紋理周?chē)斜容^大的空白地方,這就會(huì)造成兩個(gè)節(jié)點(diǎn)看起來(lái)還沒(méi)有接觸就會(huì)發(fā)生碰撞,這就需要對(duì)碰撞進(jìn)行更精確的判斷,可以通過(guò)什么像素判斷法之類(lèi)的。我這里采取最簡(jiǎn)單的處理方法,就是通過(guò)節(jié)點(diǎn)的 boundingbox 獲取到一個(gè) rect,然后對(duì)這個(gè) rect 加工一下,這樣子可以獲取節(jié)點(diǎn) boundingbox 里面的某一部分來(lái)作為碰撞的檢測(cè)部分。CCRect rectHero = this-heroLayer-getHero()-boundingBox();floa
45、t x = rectHero.origin.x + rectHero.size.width * 0.3;float y = rectHero.origin.y + rectHero.size.height * 0.4;float width = rectHero.size.width * 0.3;float height = rectHero.size.height * 0.6;CCRect rect_HeroForCrash = CCRectMake(x, y, width, height);5.2.7 觸摸事件觸摸事件virtual bool ccTouchBegan (cocos2d:C
46、CTouch *pTouch, cocos2d:CCEvent *pEvent);virtual void ccTouchMoved (cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);virtual void ccTouchEnded (cocos2d:CCTouch *pTouch, cocos2d:CCEvent *pEvent);觸摸事件;5.2.8 游戲結(jié)束場(chǎng)景游戲結(jié)束場(chǎng)景游戲最后結(jié)束需要保存分?jǐn)?shù)并退出,退出界面如圖 5.2.8:淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)19圖 5.2.8/退出按鈕CCMenuItemImage *pExitIt
47、em=CCMenuItemImage:create(exit_game_n.png,exit_game_d.png,this,menu_selector(CWXBeginSceneLayer:menuExitCallback);CC_BREAK_IF(!pExitItem);pExitItem-setPosition(ccp(_SCREEN_WIDTH_/2,_SCREEN_HEIGHT_/2-260.f);淄博職業(yè)學(xué)院信息工程系畢業(yè)設(shè)計(jì)20第第 6 6 章章 學(xué)習(xí)心得學(xué)習(xí)心得學(xué)習(xí) cocos 以后對(duì)于內(nèi)存有了一些自己的見(jiàn)解,在 C+中,在堆上分配動(dòng)態(tài)內(nèi)存和釋放動(dòng)態(tài)內(nèi)存的方法是 new 和 delete,在申請(qǐng)內(nèi)存之后,如果不使用了就需要 delete掉,不然就會(huì)造成內(nèi)存的溢出。附錄:new 的動(dòng)態(tài)內(nèi)存,只要在程序結(jié)束之前 delete 就 行,這樣在程序結(jié)束之前就可以把申請(qǐng)到的堆內(nèi)存返還給系統(tǒng),但是在實(shí)際的編程過(guò)程中,一般為了及時(shí)釋放不用的空間提高內(nèi)存的使用率而在不需要的位置調(diào)用 delete 來(lái)釋放,以免造成內(nèi)存占用過(guò)高和程序結(jié)束之前忘掉,從而造成的內(nèi)存溢出。在 c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司組織團(tuán)日活動(dòng)方案
- 公司熒光夜跑活動(dòng)方案
- 公司疫情理發(fā)活動(dòng)方案
- 公司溫情環(huán)節(jié)活動(dòng)方案
- 公司激勵(lì)經(jīng)銷(xiāo)商活動(dòng)方案
- 公司新年娛樂(lè)活動(dòng)方案
- 公司活動(dòng)創(chuàng)新活動(dòng)方案
- 公司線上中秋節(jié)活動(dòng)方案
- 公司月主體研討活動(dòng)方案
- 公司紀(jì)念畫(huà)冊(cè)策劃方案
- 關(guān)節(jié)鏡技術(shù)在髖關(guān)節(jié)炎中的應(yīng)用與治療效果
- 短視頻起號(hào)運(yùn)營(yíng)全攻略
- 班主任微創(chuàng)意:59招讓班級(jí)管理腦洞大開(kāi)
- 血管旋磨術(shù)護(hù)理查房
- 鐵路貨運(yùn)低碳化發(fā)展路徑
- 分析化學(xué)知識(shí)點(diǎn)總結(jié)
- 《統(tǒng)計(jì)學(xué)》 課件 廖穎文 1. 緒 論
- 幼兒園零星改造工程施工完整方案
- 城市軌道交通服務(wù)禮儀PPT完整全套教學(xué)課件
- 《世界遺產(chǎn)背景下的影響評(píng)估指南和工具包》
評(píng)論
0/150
提交評(píng)論