以给定角度移动b2Body

时间:2011-07-06 12:29:24

标签: iphone cocos2d-iphone box2d box2d-iphone

我有b2Body,我使用setTransform设置角度。但是我希望b2Body以特定的角度移动。我的CCSprite使用ccMoveBy在这个角度移动。但我的b2Body并没有随着那个CCSprite而移动。所以我想到了使用setTransform。我将角度设置为与移动CCSprite相同的值。但仍然b2Body在其他地方移动。

我使用它像

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

任何帮助都非常感激。

谢谢。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 POSITION

import“CGPointExtension.h”

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