2011-07-06 10 views
2

私はsetTransformを使って角度を設定したb2Bodyを持っています。しかし、私はb2Bodyを特定の角度で動かしたい。私のCCSpriteはccMoveByを使ってその角度で動いています。しかし、私のb2BodyはCCSpriteで動いていません。だから私はsetTransformの使用を考えました。私はCCSpriteを動かしている同じ値で角度を設定します。しかし、まだb2Bodyはどこかに移動します。与えられた角度でb2Bodyを動かす

私はすべてのヘルプは感謝grealyある

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

のようにそれを使用しています。

ありがとうございます。

答えて

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

これは体の回転が30度であり、その位置が変化しないためです。あなたが自分でそれをb2Bodyを移動したい場合は、ここで

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

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

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

または

iはX 200Y POSITION 100へ

輸入 "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だけ動かす必要があると言い、CCSpriteのような特定の角度に5移動する必要があります。 – Anks

+0

body-> GetAngle()を使用して現在の角度を取得し、次にそれを追加することができます。このチュートリアルは以下を助けます:http://www.iforce2d.net/b2dtut/rotate-to-angle – iforce2d

1

を変更しましたそれをキネマティックボディ(あなたが望むたびにボディタイプを変更することができます)にするのは良い考えです。次に、速度を設定します:

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