2011-07-06 51 views
2

我有b2Body其中我使用setTransform設置角度。但我希望b2Body能夠以特定的角度移動。我的CCSprite使用ccMoveBy以這個角度移動。但是我的b2Body並沒有跟着那個CCSprite移動。所以我想使用setTransform。我將角度設置爲與移動CCSprite相同的值。但是b2Body仍然會在其他地方移動。在給定角度移動b2Body

我已經用它像

b->setTransform(b->getPosition(),30*DEG_TO_RED); 
b->setLinearVelocity(b2Vec2(120,180)); 

任何幫助grealy讚賞。

謝謝。

回答

0
#define CC_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f) // PI/180 

這是爲30度旋轉的身體,而不是改變其位置。

b->setTransform(b->getPosition(),CC_DEGREES_TO_RADIANS(30)); 

    b->setLinearVelocity(b2Vec2(120,180)); 

b->setTransform(b2Vec(100/PTMRATIO,200/PTMRATIO),CC_DEGREES_TO_RADIANS(30)); 

在這裏,我更改爲100 X 200Y位置

進口 「CGPointExtension.h」

 b->setTransform(ccpAdd(b2Vec(100/PTMRATIO,200/PTMRATIO), b2Vec(50/PTMRATIO,50/PTMRATIO)),CC_DEGREES_TO_RADIANS(30)); 
+0

那麼如何改變特定角度的位置? – Anks

+0

我希望它以特定角度移動?我可以改變位置,但現在說我想讓b2Body移動5,然後移動5到像CCSprite那樣的特定角度。 – Anks

+0

您可以使用body-> GetAngle()獲取當前角度,然後添加到該角度。本教程可能有所幫助:http://www.iforce2d.net/b2dtut/rotate-to-angle – iforce2d

1

如果你想自己再移動b2Body它將其設爲運動機構是一個不錯的主意(您可以在每次需要時改變車身的類型)。然後只需設置速度:

body->SetType(b2_kinematikBody); 
float angle = 30*M_PI/180.0f; 
float spd = 50; 
b2Vec2 velocity = spd*b2Vec2(cos(angle), sin(angle)); 
body->SetLinearVelocity(velocity); 
+0

'cos'和'sin'採用弧度。 –

+0

@Martijn:謝謝,我的錯! – Andrew