Cocos2d iphone Box2d如何将车身移动到类似CCMoveTo的位置

Cocos2d iphone Box2d如何将车身移动到类似CCMoveTo的位置,cocos2d-iphone,box2d,move,Cocos2d Iphone,Box2d,Move,您好,你们知道如何将身体移动到准确的位置,如cocos2d中的CCMoveTo动作。我想知道如何使用SetLinearVelocity实现这一点 b2Vec2 force = (t * endPosition) - body->GetLinearVelocity(); [self runAction: [CCSequence actions: [CCCallBlock actionWithBlock:^{

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

同样的问题不能在目标点停止身体。。因此,请帮助我。

您必须运行在update call中找到的代码。 每次更新时,您都会将对象稍微移向您的“期望位置”


将foreDir应用于你的身体,并使用pForce进行游戏

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


如果你将矢量2视为你想要移动的物体的线速度,Chakalaka给出的公式可以很好地工作。

谢谢你的回答,我尝试使用计时器,但仍然没有成功,仍然无法将物体保持在所需的位置。它只能发生在身体缓慢移动时,否则身体会飞走3-5个甚至更多像素。我想停止身体精确的所需位置。请检查我的编辑,并保持更新功能始终运行。即使你的身体处于你想要的位置,也不要停止
float pForce = 10;

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