0

您好,如何将身体移动到准确的位置,例如 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() );

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

4

2 回答 2

1

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

float pForce = 10;

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

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

于 2012-10-30T08:38:12.213 回答
0

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

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

于 2015-09-02T15:18:38.057 回答