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 );

forDir を体に適用し、pForce で遊ぶ

于 2012-10-30T08:38:12.213 に答える
0

たとえば、ロケットなどをターゲットに向かって移動する必要がある場合は、KinematicBody を使用し、各フレームでボディの線速度を設定する方がよいことがわかりました。

動かしたい物体の線速度として Vector2 を見れば、Chakalaka によって与えられた式はうまく機能します。

于 2015-09-02T15:18:38.057 に答える