Перемещение b2Body под заданным углом - PullRequest
2 голосов
/ 06 июля 2011

У меня есть b2Body, из которых я установил угол, используя setTransform. Но я хочу, чтобы b2Body двигался под определенным углом. Мой CCSprite движется под этим углом, используя ccMoveBy. Но мой b2Body не двигается с этим CCSprite. Поэтому я подумал об использовании setTransform. Я устанавливаю угол с тем же значением, по которому я перемещаю CCSprite. Но b2Body все еще перемещается куда-то еще.

Я использовал его как

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

Любая помощь приветствуется.

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Если вы хотите переместить 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 голосов
/ 06 июля 2011
#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));
...