Box2d如何将身体移动到像CCMoveTo这样的位置

时间:2012-10-30 07:40:11

标签: cocos2d-iphone box2d move

嗨,你在那里如何将身体移动到精确位置,如cocos2d中的CCMoveTo动作。我弄清楚如何用SetLinearVelocity

制作它
b2Vec2 force = (t * endPosition) - body->GetLinearVelocity();
        [self runAction: [CCSequence actions: [CCCallBlock actionWithBlock:^{
                                                                                body->SetLinearVelocity( force );
                                                                           }],
                                              [CCDelayTime actionWithDuration: (1.0f / t)],
                                              [CCCallBlock actionWithBlock:^{
                                                                                body->SetLinearVelocity( b2Vec2_zero );
                                                                            }],nil]];

我在论坛上找到了这段代码,但它对我没有帮助..

b2Vec2 currentPosition = body->GetPosition();
b2Vec2 desiredPosition = ...;
b2Vec2 necessaryMovement = desiredPosition - currentPosition;
float necessaryDistance = necessaryMovement.Length();
necessaryMovement.Normalize();
float forceMagnitude = b2Min(maxAllowableForce, necessaryDistance);
b2Vec2 force = forceMagnitude * necessaryMovement;
body->ApplyForce( force, body->GetWorldCenter() );

同样的问题不能阻止身体在目标点..所以请帮助我。

2 个答案:

答案 0 :(得分:1)

您必须运行更新调用中找到的代码。 每次更新都会将您的对象移动到您的“desiredPosition”

float pForce = 10;

b2Vec2 forceDir = b2Vec2( ( desiredPosition.x - body->GetPosition().x ) * pForce  , 
         ( desiredPosition.y - body->GetPosition().y ) * pForce );

将foreDir应用于您的身体并使用pForce

答案 1 :(得分:0)

我发现如果你需要向目标移动,例如火箭或其他东西,那么最好使用KinematicBody并设置每帧的身体线速度。

如果您将Vector2视为您想要移动的身体的线速度,Chakalaka给出的公式可以正常工作。