版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
屬于:子龍山人首發(fā)于:泰然整理:滔小免責(zé)申明(必讀!):本博客提供的所有的翻譯原稿均來自于互聯(lián)網(wǎng),僅何糾紛,均與本博客所有人、該翻譯稿之人無(wú)任何關(guān)系。謝謝合作!原文地址
這并不是說你不能使用box2d提供的強(qiáng)大的碰撞檢測(cè)功能!Zwoptex工具來制作它。還會(huì)涉box2ddebugdrawingVertexHelper這的果沒有,最好把前面的先看一遍),或者你有相關(guān)經(jīng)驗(yàn)也可以。的SpritesandSprite然后傳遞一個(gè)精靈給它。但是,根據(jù)cocos2d最佳實(shí)踐,如果使用spritesheet來做的話,那樣會(huì)極大地提高效率。為了指定spritesheet中的每個(gè)子的位置,你需要為每個(gè)指定一個(gè)坐CCSpriteSheet*sheet=[CCSpriteSheetspriteSheetWithFile:CCSpriteSheet*sheet=[CCSpriteSheetspriteSheetWithFile:@"grossini_dance_atlas.jpg"capacity:1];CCSprite*sprite1=[CCSpritespriteWithTexture:sheet.texturerect:CGRectMake(85*0,121*1,85,121)];CCSprite*sprite2=[CCSpritespriteWithTexture:sheet.texturerect:CGRectMake(85*1,121*1,85,121)];CCSprite*sprite3=[CCSpritespriteWithTexture:sheet.textureCGRectMake(CGRectMake(85*2,121*1,85,CCSprite*sprite4=[CCSpritespriteWithTexture:sheet.texturerect:CGRectMake(85*3,121*1,85,121)];單(spritesheet),同時(shí)會(huì)導(dǎo)出每個(gè)子的坐標(biāo),這樣你在cocos2d里面使制作精靈注意,這些已經(jīng)被自動(dòng)地把周圍的空白部分給去掉了。這并不是我擇菜單Modify\UntrimSelectedImages?,F(xiàn)在,的看起來非常好了。點(diǎn)擊Arrange\ComplexbyHeight(no最后,讓把畫布(canvas)的大小調(diào)整為合適的大小。點(diǎn)擊Modify\CanvasWidth,128pxModify\Canvas最后,是時(shí)候?qū)С鰏pritesheetFile\Export名字的plist文件。從Spritesheet中添們的精靈Xcode并創(chuàng)建一個(gè)新的工程,選擇cocos2d-0.99.1Box2dApplication從彈球的中找到具體的做法。#define#definePTM_RATIO “Copyitemsintodestinationgroup’sfolder(ifneeded)”被復(fù)選CCSpriteSheetCCSpriteSheet spritesheet和plist文件。具體--(id)initif((self=[superinit]))//Createourspritesheetandframe_spriteSheet=[[CCSpriteSheetspriteSheetWithFile:@"sprites.jpg"capacity:2]retain];[selfaddChild:_spriteSheet];[self[selfschedule:@selector(secondUpdate:)}return}第一件事情就是創(chuàng)建一個(gè)spritesheet然后,使用CCSpriteFrameCache類來加載坐標(biāo)屬性列表文件。這個(gè)函器,每隔一秒調(diào)用一次secondUpdate函數(shù)。接下來,讓實(shí)現(xiàn)spawnCar方法。的做法是讓車子地在屏幕中間做路徑為三角形的運(yùn)動(dòng)。在init函數(shù)的上面添加下面函數(shù)代碼:--(void)spawnCarCCSprite*car=[CCSpritespriteWithSpriteFrameName:@"car.jpg"];car.position= (100,100);car.tag=[carrunAction:[CCRepeatForeveractionWithAction:[CCSequenceactions:[CCMoveToactionWithDuration:1.0position:(300,100)],[CCMoveToactionWithDuration:1.0position:(200,200)],[CCMoveToactionWithDuration:1.0position:(100,100)],[_spriteSheet}注意,這里創(chuàng)建sprite的時(shí)候,不是使用spriteWithFile,而是使用而是把CarSpritesheet的孫子添加進(jìn)去的。面的spawnCar方法后面添加下面的方法:--(void)spawnCatCGSizewinSize=[CCDirectorCCSprite*cat=[CCSpritespriteWithSpriteFrameName:@"cat.jpg"];intminY=cat.contentSize.height/2;intmaxY=winSize.height-(cat.contentSize.height/2);intrangeY=maxY-minY;intactualY=arc4random()%intstartX=winSize.width+(cat.contentSize.width/2);intendX=-(cat.contentSize.width/2);CGPointstartPos= (startX,actualY);CGPointendPos= (endX,actualY);cat.position=startPos;cat.tag=1;[catrunAction:[CCSequence[CCMoveToactionWithDuration:1.0position:endPos], [_spriteSheet}-{CCSprite*sprite=[_spriteSheetremoveChild:sprite}-{[self譯并運(yùn)行代碼,如果一切ok,你將會(huì)看到一輛車在屏幕上來回動(dòng),同時(shí)有一只貓從右至左穿過屏幕。接下來,添加一些碰撞檢測(cè)的代碼。為這些精靈創(chuàng)建Box2d的和之前的做法差不多。因此,讓首先創(chuàng)建world。打開oWorldScene.h,并在文件頂部添#import#importb2Worldb2Worldb2Vec2b2Vec2gravity=b2Vec2(0.0f,0.0f);booldoSleep=false;_world=newb2World(gravity,因?yàn)椴⒉幌胱屵@些對(duì)象自動(dòng)運(yùn)動(dòng),而是人為控制其運(yùn)動(dòng)。其次,告訴box2d不能讓這些對(duì)象sleep。這一點(diǎn)非常重要,因?yàn)槭侨藶榈匾苿?dòng)對(duì)象,--(void)addBoxBodyForSprite:(CCSprite*)spriteb2BodyDefspriteBodyDef.type=b2_dynamicBody;spriteBodyDef.userData=b2Body*spriteBody=_world- b2FixtureDefspriteSh = Def.density=Def.isSensor=spriteBody- }這段代碼對(duì)你來說應(yīng)該比較熟悉了---它和在breakout中是一樣的。然后,這里有一點(diǎn)區(qū)別,把sh 撞反應(yīng),那么你就需要把isSensor設(shè)置成true。這正是想要的效果![self[self[self[self你的spriteDone方法改寫成下面的形式:--(void)spriteDone:(id)senderCCSprite*sprite=(CCSprite*)sender;b2Body*spriteBody=NULL;for(b2Body*b=_world->GetBodyList();b;b=b-{if(b->GetUserData()!=NULL)CCSprite*curSprite=(CCSprite*)b->GetUserData();if(sprite==curSprite){spriteBody=b;}}}if(spriteBody!=NULL)_world-}[_spriteSheetremoveChild:sprite}[self[self--(void)tick:(ccTime)dt_world->Step(dt,10,for(b2Body*b=_world->GetBodyList();b;b=b-{if(b->GetUserData()!=NULL)CCSprite*sprite=(CCSprite*)b-b2Vec2b2Position=b2Vec2(sprite.position.x/PTM_RATIO,float32b2Angle=-1*b->SetTransform(b2Position,}}}cocos2dbox2dbodydebugBox2DDebug#import#import"GLES-GLESDebugDrawGLESDebugDraw//Enabledebug//Enabledebug_debugDraw=newGLESDebugDraw(PTM_RATIO_world-uint32flags=flags+= _debugDraw-傳遞一個(gè)flag來指定需要顯示的仿真細(xì)節(jié)---這里只想顯示box2d的 -(-(void){_world-}最后需要注意的一點(diǎn),在dealloc函數(shù)中添加清理代碼:--(void)deallocdelete_world;[superdealloc];}周的矩形區(qū)域。如果ok話,你會(huì)看到這些粉紅shsprite運(yùn)碰撞檢把MyContactListener.h和MyContactListener.mm兩個(gè)文件添加到工程中同時(shí),你還可以我為本制作的美妙的音效。#importMyContactListenerMyContactListener//Createcontact//Createcontact_contactListener=new//Preload[[SimpleAudioEnginesharedEngine]std::vector<b2Body*>toDestroy;std::vector<b2Body*>toDestroy;for(pos=_contactListener->_contacts.begin();pos!=_contactListener->_contac d();++pos){MyContactcontact=b2Body*bodyA=contact.fixtureA->GetBody();b2Body*bodyB=contact.fixtureB-if(bodyA->GetUserData()!=NULL&&bodyB->GetUserData()!={CCSprite*spriteA=(CCSprite*)bodyA->GetUserData();CCSprite*spriteB=(CCSprite*)bodyB->GetUserData();if(spriteA.tag==1&&spriteB.tag=={}elseif(spriteA.tag==2&&spriteB.tag=={}}}std::vector<b2Body*>::iteratorstd::vector<b2Body*>::iteratorfor(pos2=toDestroy.begin();pos2!=toDestroy.end();{b2Body*body=if(body->GetUserData()!=NULL)CCSprite*sprite=(CCSprite*)body->GetUserData();[_spriteSheetremoveChild:spritecleanup:YES];}_world-}if(toDestroy.size()>0)[[SimpleAudioEnginesharedEngine]}[_spriteSheetrelease];調(diào)整sh的邊界你可能已經(jīng)注意到了,的box2dsh的邊界并不是和sprite的邊界些確不行!需要嚴(yán)格地定義sh的邊界和精靈的邊界重合在一起。在Box2d里面,你可以通過指定sh 的頂點(diǎn)來指定sh 已經(jīng)開發(fā)出了一個(gè)非常方便的工具,叫做VertexHelper,它可以用來非常方便地定義頂點(diǎn),而且可以導(dǎo)出box2d所需要的格式的數(shù)據(jù)。好了,先去VertexHelper吧。他是一個(gè)Mac應(yīng)用程序,同時(shí)包含了源代碼,因此,你只需要打開VertexHelper.xcodeproj,然后編譯并運(yùn)行就可把編譯好的工程放到Application文件夾下面,以后就直接打開就可以了)2.VertexHelper會(huì)自動(dòng)地把劃分成兩個(gè)部分。連接起來,因此,不需要連接它們。形是凸多邊形。這意味著多邊形的沒有一個(gè)角大于180度。或者說是,多邊形內(nèi)任何兩個(gè)頂點(diǎn)的連線都在多邊形的。如果你對(duì)這個(gè)定義不是很清楚的box2db2_maxPolygonVerticessh最8b2Settings.h中把這個(gè)值改掉。但是,這個(gè)中,只需要8個(gè)頂點(diǎn)就夠了。一旦你做完之后,在下拉列表中選擇Box2d,Style選擇好,讓把工程中的sh 后修改addBoxBodyForSprite
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 娛樂行業(yè)招聘策略總結(jié)
- 2025年全球及中國(guó)螺旋藻蝦青素行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)合成生物學(xué)智造平臺(tái)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球輕型柴油發(fā)動(dòng)機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球反流檢測(cè)設(shè)備行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球裝飾金屬板光纖激光切割機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球降膜式風(fēng)冷螺旋式冷水機(jī)組行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)無(wú)塑工業(yè)軟包涂層紙行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)聚合物氫氣分離膜行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)搖擺式生物工藝容器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 搞笑小品劇本《大城小事》臺(tái)詞完整版
- 物業(yè)服務(wù)和后勤運(yùn)輸保障服務(wù)總體服務(wù)方案
- 人大代表小組活動(dòng)計(jì)劃人大代表活動(dòng)方案
- 《大模型原理與技術(shù)》全套教學(xué)課件
- 2023年護(hù)理人員分層培訓(xùn)、考核計(jì)劃表
- 《銷售培訓(xùn)實(shí)例》課件
- 2025年四川省新高考八省適應(yīng)性聯(lián)考模擬演練(二)地理試卷(含答案詳解)
- 【經(jīng)典文獻(xiàn)】《矛盾論》全文
- Vue3系統(tǒng)入門與項(xiàng)目實(shí)戰(zhàn)
- 2024年寧夏回族自治區(qū)中考英語(yǔ)試題含解析
- 光伏發(fā)電項(xiàng)目試驗(yàn)檢測(cè)計(jì)劃
評(píng)論
0/150
提交評(píng)論