嗨,你在那里如何将身体移动到精确位置,如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() );
同样的问题不能阻止身体在目标点..所以请帮助我。
答案 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给出的公式可以正常工作。