2013-04-03 42 views
0

我有一個方形屏障,在運行時根據用戶放置屏障位置和旋轉的位置定義了邊緣。如何刪除box2d燈具

b2BodyDef barrierBodyDef; 
barrierBodyDef.type = b2_staticBody; 
barrierBodyDef.position.Set(curBarrier 
          .position.x/PTM_RATIO, curBarrier.position.y/PTM_RATIO); 
barrierBodyDef.userData = curBarrier; 


b2Body *barrierBody; 
barrierBody = _world->CreateBody(&barrierBodyDef); 

b2EdgeShape barrierEdge; 
b2FixtureDef barrierShapeDef; 
barrierShapeDef.shape = &barrierEdge; 
barrierShapeDef.friction = 1.0f; 

barrierEdge.Set(b2Vec2((x1)/PTM_RATIO, (y1)/PTM_RATIO), 
       b2Vec2((x2)/PTM_RATIO, (y2)/PTM_RATIO)); 
barrierBody->CreateFixture(&barrierShapeDef); 
barrierEdge.Set(b2Vec2((x2)/PTM_RATIO, (y2)/PTM_RATIO), 
       b2Vec2((x3)/PTM_RATIO, (y3)/PTM_RATIO)); 
barrierBody->CreateFixture(&barrierShapeDef); 
barrierEdge.Set(b2Vec2((x3)/PTM_RATIO, (y3)/PTM_RATIO), 
       b2Vec2((x4)/PTM_RATIO, (y4)/PTM_RATIO)); 
barrierBody->CreateFixture(&barrierShapeDef); 
barrierEdge.Set(b2Vec2((x4)/PTM_RATIO, (y4)/PTM_RATIO), 
       b2Vec2((x1)/PTM_RATIO, (y1)/PTM_RATIO)); 
barrierBody->CreateFixture(&barrierShapeDef); 

我現在想刪除這些邊緣,從而使用戶可以重新定位的屏障。

我該如何去除點x1,y1, - > x4,y4之間的邊,以便它們不受碰撞的影響。

我對Box2D有點新鮮。

+0

Right so: _world-> DestroyBody(barrierBody); 然後用新的位置重新創建一個新的身體? – SamBo

+0

是的,重新創建新的職位.. – iphonic

+1

@Guru:當然你可以刪除燈具,但是你不能刪除燈具的形狀,也不能改變形狀......錯誤,形狀。 ;) – LearnCocos2D

回答

2

保持夾具創造它時(這裏局部變量,例如,你應該使用伊娃):

b2Fixture* barrierFixture = barrierBody->CreateFixture(&barrierShapeDef); 

後來摧毀夾具:

barrierBody->DestroyFixture(barrierFixture); 
barrierFixture = nil; 

您也可以用身體的GetFixtureList()來遍歷燈具。

你不能做的是添加或刪除夾具的形狀,或修改形狀的頂點。要從身體的形狀中刪除一個點,您必須銷燬該夾具並將其替換爲新的。

沒有必要重新創建整個身體,事實上這可能是有問題的,因爲您可能想保留身體的當前狀態(不僅僅是位置,還包括線性和角速度以及其他可能)。