




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ZIBOVOCATIONALINSTITUTE畢業(yè)設計題目基于Cocos2D-X的跨平臺游戲的設計與實現姓名 學號 系(院) 班級 指導教師 職稱 2014年5月20日
畢業(yè)設計(論文)答辯評審表課題名稱基于Cocos2d-X的跨平臺游戲的設計與實現學生姓名答辯小組評分指導教師簽名評語:答辯小組負責人簽字:年月日答辯小組成員簽名畢業(yè)設計(論文)成績評定表指導教師評分(30分)評閱人評分(30分)答辯評分(40分)綜合成績答辯委員會負責人簽字:年 月 日目錄TOC\o"1-5"\h\z\o"CurrentDocument"第一章緒論 1\o"CurrentDocument"手游背景 1\o"CurrentDocument"發(fā)展趨勢 1\o"CurrentDocument"研究意義 1不足之處 錯誤!未定義書簽。第二章相關技術 2\o"CurrentDocument"C++語言 3\o"CurrentDocument"Cocos2D-X平臺技術介紹 3\o"CurrentDocument"3開發(fā)工具 4\o"CurrentDocument"第三章設計概要 3\o"CurrentDocument"游戲介紹 4\o"CurrentDocument"2游戲的結構例圖 5\o"CurrentDocument"3.3功能模塊分析圖 5游戲歡迎頁面 6\o"CurrentDocument"游戲主頁面 6\o"CurrentDocument"3.4游戲失敗 7\o"CurrentDocument"第四章項目設計 8\o"CurrentDocument"游戲架構設計 8\o"CurrentDocument"第五章項目實現 9\o"CurrentDocument"5.1游戲總體實現 9\o"CurrentDocument"5.2各模塊實現 9\o"CurrentDocument"5.2.1功能的實現依賴 9\o"CurrentDocument"游戲主歡迎頁的實現 95.2.3游戲主場景 11\o"CurrentDocument"5.2.4游戲主角類 11\o"CurrentDocument"5.2.5敵機類 13\o"CurrentDocument"敵機管理 15\o"CurrentDocument"觸摸事件 18\o"CurrentDocument"游戲結束場景 18\o"CurrentDocument"第六章學習心得 20\o"CurrentDocument"第七章項目總結與展望 21\o"CurrentDocument"參考文獻 22第1章緒論手游背景手游指在手機等各類手持硬件設備上運行的游戲類應用程序,其需要具備一定硬件環(huán)境和一定系統(tǒng)級程序作為運行基礎。2004年,手機游戲均為WAP游戲,到2005年,圖形化手機游戲激增,已經超過40余款。2005年6月,盛大英特爾宣布攜手共同開發(fā)國內手機游戲市場,手機網游行業(yè)陣營開始空前壯大,繼盛大、北京掌訊、美通之后,網易、空中,標派等也紛紛加入,目前國內手機游戲廠商已經近30家。手機游戲尚處于市場導入期,在未來幾年內,手機游戲將步入快速發(fā)展階段。發(fā)展趨勢近年來,隨著智能機的普及以及3G的覆蓋率增加,手機網游日益興起,現已經有近兩千萬的手機網游玩家了。2014年,國內移動互聯(lián)網競爭格局未定,運營商拒絕管道化欲謀更多話語權,轉型力度、資源投入日趨加大;在部分細分領域,圍繞運營商轉型的業(yè)務和渠道價值驟然放大,引發(fā)產業(yè)整合日趨頻繁。在此背景下,國內移動互聯(lián)龍頭拓維信息通過多年技術積累及運營商渠道優(yōu)勢,確定以手機動漫與游戲業(yè)務為兩大核心發(fā)展方向之一。研究意義全球在使用的移動電話已經超過10億部,而且這個數字每天都在不斷增加。在除美國外的各個發(fā)達國家,手機用戶都比計算機用戶多。手機游戲潛在的市場比其他任何平臺,比如PlayStation和GameBoy都要大。在控制臺游戲時代,GameBoy熱銷的一個原因就是便攜性——人們可以隨時隨地沉浸在自己喜歡的游戲中,還可以隨時隨地搶購自己喜歡的裝備或寵物。和游戲控制臺或者PC相比,手機雖然可能不是一個理想的游戲設備,但畢竟人們總是隨時隨身攜帶,這樣手機游戲很可能成為人們消遣時間的首選。手機便攜性、移動性的特征更能滿足用戶隨時隨地玩游戲的需求,用戶利用排隊、等車的時間進行游戲,手機游戲碎片化的特性凸顯。調查顯示,29.8%的用戶在用手機玩游戲以后電腦端玩游戲的時間減少,手機游戲已經開始搶奪電腦游戲時間。22.4%的用戶手機游戲時間越來越長,僅有10%的用戶時間變短,手機游戲已逐漸成為一種普遍的娛樂方式。因為手機是網絡設備,在一定限制因素下可以實現多人在線游戲。隨著移動網絡的發(fā)展,移動游戲也越來越多的被大家接受,對于之前長期通知市場的掌機來說造成了不少的沖擊。市場研究公司IDC和AppAnnie報告顯示2013年第一季度iOS和Android平臺游戲業(yè)務營收是掌機的3倍。手機游戲市場潛力大,投入資金少,吸引了很多市場進入者,但中小SP在激烈的競爭中生存問題是需要考慮的主要問題。手機游戲開發(fā)商、游戲應及服務提供商不重視市場宣傳和推廣工作,忽視對于游戲產品,用戶的體驗和習慣培養(yǎng)重要性。手機游戲市場競爭激烈,該競爭涉及國內,也涉及國外游戲開發(fā)商。追求低成本和短期利益,現游戲產品的質量粗糙。手機游戲的同質化也越來越嚴重,創(chuàng)新力不足。第2章相關設計2.1C++語言C++語言是一種使用非常廣泛的計算機編程語言。是一種靜態(tài)數據類型檢查的、支持多重編程范式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。C++在一定程度上可以和C語言很好的結合,甚至大多數C語言程序是在C++的集成開發(fā)環(huán)境中完成的。C++相對眾多的面向對象的語言,具有相當高的性能。C++引入了面向對象的概念,使得開發(fā)人機交互類型的應用程序更為簡單、快捷。很多優(yōu)秀的程序框架包括MFC、QT就是使用的C++。C++避免平臺限定或沒有普遍用途的特性。C++不使用會帶來額外開銷的特性。C++設計成無需復雜的程序設計環(huán)境。2.2Cocos2D-X平臺技術介紹cocos2d是一個基于MIT協(xié)議的開源框架,用于構建游戲、應用程序和其他圖形界面交互應用。這是一個C++Cocos2d-iPhone項目的版本。Cocos2d-X發(fā)展的重點是圍繞Cocos2d跨平臺,Cocos2d-x提供的框架。手機游戲,可以寫在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x項目可以很容易地建立和運行在IOS,Android,黑莓Blackberry等操作系統(tǒng)中。Cocos2d-x還支持Windows、Mac和Linux等桌面操作系統(tǒng),因此,開發(fā)者編寫的源代碼很容易在桌面操作系統(tǒng)中編輯和調試。Cocos2D-X主要功能:流程控制(Flowcontrol):非常容易地管理不同場景(scenes)之間的流程控制;精靈(Sprites):快速而方便的精靈;動作(Actions):告訴精靈們該做什么??山M合的動作如移動(move)、旋轉(rotate)和縮放(scale)等更多;特效(Effects):特效包括波浪(waves)、旋轉(twirl)和透鏡(lens)等更多;平面地圖(TiledMaps):支持包括矩形和六邊形平面地圖;轉換(Transitions):從一個場景移動到另外一個不同風格的場景;菜單(Menus):創(chuàng)建內部菜單;文本渲染(TextRendering):支持標簽和HTML標簽動作;文檔(Documents):編程指南+API參考+視頻教學+很多教用戶如何使用的簡單測試例子;MIT許可:盡管用就是了;基于Pyglet:沒有外部的依賴;基于OpenGL:支持硬件加速;3D對象:MD2模型支持;腳本語言:支持Lua,JavaScript語言。圖2.2Cocos2D-X引擎架構2.3開發(fā)工具游戲在WindowsXP系統(tǒng)下開發(fā),基于visualstudioC++2008的開發(fā)平臺,采用了cocos2d-x技術進行開發(fā)。操作系統(tǒng):MicrosoftWindows7程序語言:C++開發(fā)工具:MicrosoftVisvalStudio2012,cocos2d-x-2.2.2MicrosoftVisualC++,(簡稱VisualC++、MSVC、VC++或VC)微軟公司的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++等編程語言。VisualC++以擁有“語法高亮”IntelliSense(自動編譯功能)以及高級除錯功能而著稱。比如,它允許用戶進行遠程調試,單步執(zhí)行等。還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試的程序。其編譯及建置系統(tǒng)以預編譯頭文件、最小重建功能及累加鏈接著稱。這些特征明顯縮短程序編輯、編譯及鏈接的時間花費,在大型軟件計劃上尤其顯著。C++語言是目前面向對象編程的首選語言,學習、使用C++語言并進行應用程序設計的人員非常多,Microsoft公司的Visual C++2008因其強大的功能、非常友好的界面而成為當前最為熱門C++語言開發(fā)環(huán)境oVisualC++提供的集成開發(fā)環(huán)境、MFC類庫和應用程序框架極大地便利了用C++語言開發(fā)Windows應用程序所需的源代碼編寫、用戶界面設計、消息映射、編譯鏈接和調試運行等工作。第3章設計概要3.1游戲介紹這是一款飛行射擊類游戲,整體環(huán)境主要還是圍繞太空為主,高保真的音效,為玩家呈現一場不一樣射擊體驗。簡單的觸屏操作,觸屏按住隨意一個地方,左右移動,便可自動攻擊敵人,上下移動亦可躲避強敵。在飛機的左下角還有兩個道具槽,直接點擊就可以發(fā)動道具效果,前提是你必須要吃到道具。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機,在敵機身前發(fā)動攻擊。在擊毀敵機的同時獲得分數,擊毀的敵機越多,則相對的獲得分數就越高。玩家進行游戲的時候需要注意不能被敵機及敵機子彈碰到,否則玩家控制角色死亡,同時游戲結束。記錄玩家獲取的積分。3.2游戲的結構例圖游戲的結構例圖如圖3.2所示:bXCootrolLayEr.cpp卜ElControlLayer..h卜**NoTouchLayer^cppl>EINdTqucKLayerJiiJ報苣嘩卜+*MutiBuiletsLa^erxpp卜ElMutiBullet&Uyer.ln4歸漏s主s類bXPIaneLayer,cppl>EPlaneLayer.hH痢子彈奘卜BulleltLayer.€ppbEBulhtLoy^rih」W游戲結束場貝b"HGameChreirlLfiryEir.cpp卜EiGameOverLayer.lhb-GameOverScEne.cpp卜□GameOverScene.h卜-GflmdLayer.qppbElGameLayB-r.h卜*bEnerny.qpp卜BEnemy.Jn卜EnemyLayer.-cppbElEnemyLaytrBhi卜*?=WelcomeScene.cpp卜EiWelcomeScene.lhi>刁習戲主疑黑卜歹Res-our-ces卜Miwimi32圖3.2游戲的結構圖例圖3.3功能模塊分析圖游戲功能模塊主體分析:
3.3.1游戲歡迎頁面游戲歡迎頁面主要是預加載游戲進行需要的圖片、音樂等資源進行預加載。3?3?2游戲主頁面游戲主頁面邏輯判斷如圖3.3所示。- ——1亠 1圖3.3游戲主頁面邏輯判斷圖道具使用邏輯圖如下:圖3.3道具使用邏輯圖3.4游戲失敗第4章項目設計4.1游戲架構設計由項目的需求分析可以清晰的對本游戲的具體功能實現進行設計,如下圖4.1是本游戲的總體架構設計。圖4.1游戲總體構架設計通過對游戲的需求進行分析和細致的歸納,可以認為游戲的主要內容是由游戲進行時和游戲失敗兩個主要部分所構成。游戲進行時包含了用戶對主角的操作以及對主角信息(獲得的分數及獲取的道具)的管理,用戶游戲結束的操作選擇,游戲進行為本系統(tǒng)的設計核心?;谶@些考慮,本游戲將對游戲進行時的事件作為一個重點的功能模塊進行詳細設計。第5章項目實現前四章是對游戲的邏輯和功能上的設計,而游戲實現階段就要依據之前的成果將抽象化設計轉化為物理實現。5.1游戲總體實現游戲的模塊結構是對游戲的進行一個總體劃分,要真正的實現游戲,還需要進一步的設計用戶的功能。游戲的功能分為十類:游戲主場景、游戲歡迎頁、游戲主角類、游戲敵機類、子彈類、游戲場景類、游戲結束場景類、管理類、道具類、觸摸事件,針對每一個功能都實現了不同的作用。5.2各模塊實現本文對貨單管理模塊、個人信息管理模塊、系統(tǒng)信息管理模塊中的功能具體實現過程進行論述。5.2.1功能的實現依賴項目創(chuàng)建的時候需要添加cocos2d-x的支持項,如圖521,卜OlibBox2D卜囤libchipmunkSjlibcoco&2d丨掃匚ocos-Denshion卜SIlbExtensions圖5.2.1搭建好的工程在第一次創(chuàng)建項目的時候會自動把需要的外部依賴項添加到項目下,不需要手動額外添加。需要注意的是,在開始一個項目的時候,要把需要用到的圖片資源以及音樂添加到項目目錄下,否則在項目進行的過程中會報錯。資源文件盡量不要用中文命名,有時會出現字符編碼的錯誤。5.2.2游戲主歡迎頁的實現用戶在進去游戲的時候,會首先進入到歡迎頁面(圖5.221)。歡迎頁是為了對資源,即圖片資源和音樂資源進行預加載,圖片資源和音樂資源相對較大,進入游戲后在加載比較慢,對游戲體驗會造成一定影響,所以在歡迎頁面進行預加載,進入游戲后可以享受較好的體驗,不會因為加載資源而造成游戲卡的問題。加載資源代碼如下://加載音樂資源PreloadMusicO;voidWelcomeLayer::PreloadMusic(){CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(""sound/game_music.mp3〃);CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(""sound/bullet.mp3"");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(""sound/enemyl_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"");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(""sound/get_bomb.mp3"");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(""sound/get_double_laser.mp3"");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("sound/use_bomb.mp3");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("sound/big_spaceship_flying.mp3");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("sound/achievement.mp3");CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("sound/out_porp.mp3");"sound/buttoCocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(n.mp3");"sound/buttoCocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("sound/game_music.mp3",true);}這是做一個檢測,可以不添加,但是為了保證代碼的健壯性要添加:boolbRet二false;do{CC_BREAK_IF(!CCLayer::init());、、、、、、、bRet二true;}while(0);returnbRet;5.2.3游戲主場景游戲主場景是為添加的精靈提供一個層,所有的精靈都是在這個層上進行添加。5.2.4游戲主角類創(chuàng)建游戲主角后,然他在進入游戲后閃爍三次,主角在進行飛行的時候讓尾巴的煙火一長一短,顯示正在飛行,這里是通過兩個圖片不斷交替顯示完成的。//創(chuàng)建CCBlink效果CCBlink*blink=CCBlink::create(l,3);//CCAnimation*animation二CCAnimation::create();//通過.png和.plist文件創(chuàng)建精靈表//animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("herol.png"));//animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero2.png"));//從本地文件系統(tǒng)中加載圖片文件到CCSpriteFrame中區(qū),然后添加至【」CCAnimation中for(inti二1;i<3;i++){charszImageFileName[128]={0};sprintf(szImageFileName,"hero%d.png",i);animation->addSpriteFrameWithFileName(szImageFileName);CC_BREAK_IF(!animation);}-—animation->setDelayPerUnit(0.1f);CCAnimate*animate二CCAnimate::create(animation);plane->runAction(blink);plane->runAction(CCRepeatForever::create(animate));主角在飛行的時候會發(fā)射子彈,所以要添加子彈,同時發(fā)射子彈的時候還有子彈的音效CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sound/bullet.mp3");CCSprite*bullet二CCSprite::createWithSpriteFrameName("bullet1.png");bulletBatchNode->addChild(bullet);//this->addChild(bullet);this->m_pAllBullet->addObject(bullet);CCPointplanePosition二PlaneLayer::sharedPlane->getChildByTag(AIRPLANE)->getPosition();CCPointbulletPosition二ccp(planePosition.x,planePosition.y+PlaneLayer::sharedPlane->getChildByTag(AIRPLANE)->getContentSize().height/2);bullet->setPosition(bulletPosition);floatlength二CCDirector::sharedDirector()->getWinSize().height+bullet->getContentSize().height/2-bulletPosition.y;floatvelocity=320/1;//320pixel/secfloatrealMoveDuration=length/velocity;CCFiniteTimeAction*actionMove二CCMoveTo::create(realMoveDuration,ccp(bulletPosition.x,CCDirector::sharedDirector()->getWinSize().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ā)射是有間隔的,設置一個schedule,有規(guī)律的調用AddBullet函數,是子彈發(fā)射;voidBulletLayer::StartShoot(floatdelay){this->schedule(schedule_selector(BulletLayer::AddBullet),0.20f,kCCRepeatForever,delay);}voidBulletLayer::StopShoot(){this->unschedule(schedule_selector(BulletLayer::AddBullet));}5.2.5敵機類游戲里要有敵人,添加敵機,敵機要根據時間添加,,防止出現一大群敵機同時出現//初始化boolCWXEnemyManager::Init(CCTexture2D*pTexture,floatfSpeed,intnCD,intnScore,intnHp,Receiver*pReceiver){do{//對敵人的屬性賦值m_nScore=nScore;m_nHp=nHp;m_pReceiver=pReceiver;m_nCD=nCD;m_nCDTime=m_nCD;m_pTexture=pTexture;m_fSpeed=fSpeed;returntrue;}while(false);CCLog("FunEnemyManager::InitError!");returnfalse;}//判斷是否創(chuàng)建敵人voidCWXEnemyManager::EnemyManagerLoopO{if(IsCreate()){Create();}}//更新創(chuàng)建敵人時間boolCWXEnemyManager::IsCreate(){if(m_nCD==0){m_nCD=m_nCDTime;returntrue;}else{m_nCD—;returnfalse;}}//根據敵人屬性創(chuàng)建敵人voidCWXEnemyManager::Create(){CCSizePlaneSize=m_pTexture->getContentSize();EnemyForCreateMsgInfo;Info.nScore=m_nScore;Info.nHp=m_nHp;Info.pTexture=m_pTexture;Info.fSpeed=m_fSpeed;//為了不讓敵機產生一半在屏幕外的情況?!狿laneSize.width)Info.pStartPoint=CCPointMake(rand()%(int)(_SCREEN_WIDTH_+PlaneSize.width*0.5,_SCREEN_HEIGHT_—PlaneSize.width)//發(fā)消息創(chuàng)建敵人this—>SendMsg(enMsgEnemyForCreate,&Info,sizeof(Info));5.2.6敵機管理敵機與主角子彈碰撞后,要做碰撞檢測。同時發(fā)送消息消除敵機,將發(fā)生了碰撞的敵機進行回收,把碰撞的子彈和敵機存入CCArray中,移除碰撞的子彈和敵機voidGameScene::detectionCrash(){CCArray*bulletsToDelete=CCArray::create();//創(chuàng)建一個CCArray,用以存放待刪除的子彈,也就是此幀中被檢測到碰撞的子彈 bulletsToDelete->retain();//必須調用retain,CCArray內部調用了autoReleaseCCObject*bt,*et;CCArray*enemyToDelete=CCArray::create();//創(chuàng)建一個CCArray,用以存放待刪除的敵機,也就是此子彈擊中的敵機enemyToDelete—>retain();//調用retain CCRectrectHero=this—>heroLayer—>getHero()->boundingBox();floatx=rectHero.origin.x+rectHero.size.width*0.3;floaty二rectHero.origin.y+rectHero.size.height*0.4;floatwidth=rectHero.size.width*0.3;floatheight二rectHero.size.height*0.6;CCRectrect_HeroForCrash=CCRectMake(x,y,width,height);//檢測敵機和hero是否相撞CCARRAY_FOREACH(this->enemyLayer->m_enemys,et)//遍歷所有敵機{//break;Enemy*enemy=(Enemy*)et;if(enemy—>getLife()==0){break;}//CCPointrectl二this—>heroLayer—>getHero()->getPosition();//boundingBox獲取的是相對于父節(jié)點的左下角為原點的一個rect,所以要比較兩個精靈是否相交,他們的父節(jié)點的坐標原點和大小應該一樣if(enemy—>boundingBox().intersectsRect(rect_HeroForCrash)){—this—>heroLayer—>setlsHeroLive(false);this->heroLayer->setHeroLifes(this->heroLayer->getHeroLifes()-1);enemyLayer->stopTakeEnemy();enemyLayer->bomb(enemy);enemyLayer->removeAllEnmeys();SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();inttempHightScore=GameScene::getHightestScore();if(this->m_totalScore>tempHightScore){GameScene::saveHightestScore(this->m_totalScore);}charlife[64];sprintf(life,"%d",this->heroLayer->getHeroLifesO);CCLabelTTF*lbLife=(CCLabelTTF*)this->getChildByTag(tagOfLife);lbLife->setString(life);this->heroLayer->heroBomb(0.1f);if(this->heroLayer->getHeroLifes()==0){this->scheduleOnce(schedule_selector(GameScene::gameOverCallback),2.0f);}else{this->scheduleOnce(schedule_selector(GameScene::newLife),2.0f);}return;}}//檢測敵機和子彈是否相撞CCARRAY_FOREACH(this->heroLayer->getBullets()->m_bullets,bt)//遍歷所有子彈{CCSprite*bullet二(CCSprite*)bt;CCARRAY_FOREACH(this->enemyLayer->m_enemys,et)//遍歷所有敵機{Enemy*enemy3=(Enemy*)et;if(enemy3->boundingBox().intersectsRect(bullet->boundingBox())){if(enemy3->getLife()>1){enemy3->loseLife();bulletsToDelete->addObject(bullet);//把待刪除子彈放入CCArray }elseif(enemy3->getLife()==1){enemy3->loseLife();bulletsToDelete->addObject(bullet);//把待刪除子彈放入CCArray enemyToDelete->addObject(enemy3);//把待刪除敵機放入CCArray this->m_totalScore+=enemy3->getScore();charstrl[20];sprintf(strl,"%d",(int)this->m_totalScore);CCLabelTTF*label1=(CCLabelTTF*)this->getChildByTag(tagOfScore);label1->setString(str1);}}}}CCARRAY_FOREACH(enemyToDelete,et)//遍歷所有此幀中碰撞死亡的敵機,必須是死亡{CCSprite*enemy3=(CCSprite*)et;this->enemyLayer->bomb(enemy3);//執(zhí)行爆炸}enemyToDelete->release();//releaseCCARRAY_FOREACH(bulletsToDelete,bt)//遍歷所有此幀中碰撞的子彈{CCSprite*bullet二(CCSprite*)bt;this->heroLayer->getBullets()->removeBullet(bullet);//執(zhí)行移除}bulletsToDelete->release();//release}bullet是加到ccspriteBatchNode上的,ccspriteBatchNode是加到BulletLayer上面的,ccspriteBatchNode和bulletLayer都是鋪滿屏幕的。所以子彈調用boundingbox獲得的矩形是以屏幕左下角為原點的。敵機的原理也是如此。hero是直接加到herolayer上的,父節(jié)點同樣是鋪滿屏幕的,所以他們的父節(jié)點的左下角的坐標都一樣的,這就是通過boundingbox檢測他們是否碰撞的前提。有些紋理周圍有比較大的空白地方,這就會造成兩個節(jié)點看起來還沒有接觸就會發(fā)生碰撞,這就需要對碰撞進行更精確的判斷,可以通過什么像素判斷法之類的。我這里采取最簡單的處理方法,就是通過節(jié)點的boundingbox獲取到一個rect,然后對這個rect加工一下,這樣子可以獲取節(jié)點boundingbox里面的某一部分來作為碰撞的檢測部分。CCRectrectHero=this->heroLayer->getHero()->boundingBox();floatx=rectHero.origin.x+rectHero.size.width*0.3;floaty=rectHero.origin.y+rectHero.size.height*0.4;floatwidth=rectHero.size.width*0.3;floatheight=rectHero.size.height*0.6;CCRectrect_HeroForCrash=CCRectMake(x,y,width,height);5.2.7觸摸事件virtualboolccTouchBegan(cocos2d::CCTouch*pTouch,cocos2d::CCEvent*pEvent);virtualvoidccTouchMoved(cocos2d::CCTouch*pTouch,cocos2d::CCEvent*pEvent);virtualvoidccTouchEnded(cocos2d::CCTouch*pTouch,cocos2d::CCEvent*pEvent);觸摸事件;5.2.8游戲結束場景游戲最后結束需要保存分數并退出,退出界面如圖5.2.8:
//退出按鈕CCMenultemImage*pExitltem二CCMenultemlmage::create(〃?丿〃exit_game_n.png,"exit_game_d.png",thismenu_selector(CWXBeginSceneLayer::menuExitCallback));CC_BREAK_IF(!pExititem);pExititem->setPosition(ccp(_SCREEN_WIDTH_/2,_SCREEN_HEIGHT_/2-26O.f));第6章學習心得學習cocos以后對于內存有了一些自己的見解,在C++中,在堆上分配動態(tài)內存和釋放動態(tài)內存的方法是new和delete,在申請內存之后,如果不使用了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圍堰施工課題申報書
- 軟件測試申報書課題
- 課題申報書方案構建模板
- 合伙企業(yè)人合同范本
- 單位買電合同范本
- 合同范本分包合同
- 課題申報書課題類型
- 特殊學生教育課題申報書
- 和單位購銷采購合同范本
- 品牌門窗店銷售合同范本
- 2025年湖南環(huán)境生物職業(yè)技術學院單招職業(yè)技能測試題庫一套
- 2025年黑龍江農業(yè)經濟職業(yè)學院單招職業(yè)傾向性測試題庫參考答案
- 2025年湖南安全技術職業(yè)學院單招職業(yè)技能測試題庫參考答案
- DB3202-T 1063-2024 質量基礎設施“-站式”服務與建設規(guī)范
- 2025年廣東省深圳法院招聘書記員招聘144人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 變電站電網側儲能項目可行性研究報告
- 新版統(tǒng)編版一年級道德與法治下冊全冊教案(完整版)教學設計含教學反思
- 4.2 同學相伴 第二課時 課件 2024-2025學年三年級下冊道德與法治 統(tǒng)編版
- 2025年春季學期學校德育工作計劃安排表(完整版)
- 2025年全球及中國調頻儲能行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 第九章-或有事項教學教材
評論
0/150
提交評論