2016-07-07 10 views
2

問題libgdx box2d body - タッチポイントの位置に達した後に体が揺れているのはなぜですか?

弾丸は体が 先など..ので、砦... 奇妙な行動に戻し、再び背中と砦先から前の位置に、揺れているその先に到達した場合

Visual

サンプルコード

Vector2 targetPosition = 
// Copied target position and subtracted by bullet position 
Vector2 targetDirection = targetPosition.cpy().sub(bulletPosition); 

float distance = bulletPosition.dst(targetPosition); 

float speed = 16; 
Vector2 velocity = targetDirection 
     .cpy() // Copied target direction 
     .nor() // normalize to avoid getting the direction as speed 
     .scl(speed); // scaled by speed 
// the distance is not accurate, so we get the time step as defined precision 
float DEFINED_PRECISION = Constants.TIME_STEP; 
// check if the bullet is near or maybe match the touch point 
if(distance >= DEFINED_PRECISION) { 
    // move the bullet 
    body.setLinearVelocity(velocity); 
} else { 
    // stop the bullet 
    body.setLinearVelocity(0,0); 
} 

答えて

2

おそらくあなたDEFINED_PRECISIONが低すぎる - あなたは(も、あなたのループ内でSystem.out.println(body.getPosition());のようなものを追加することによって)すべてのステップでbody's位置をログアウトし、それは大きいですwheterチェックする必要があります。

状況が

  1. ボディは、目標点の前にあることを、その後で、それはdistanceが大きくよりDEFINED_PRECISIONは、それが前方に移動されているのです
  2. ボディは、目標点の後で、それはdistanceが大きくよりDEFINED_PRECISIONありますそれは移動されている
  3. ボディが目標ポイントの前にあり、distanceDEFINED_PRECISIONより大きい...
  4. より大きい

そして、それはあなたがあなたのDEFINED_PRECISIONを変更する必要があり、すべての:)

最初に揺れている理由です - 体は一つのフレームに移動していると2で割っこの値はDEFINED_PRECISION(どうあるべきかくらいをチェック2つのフレーム間でボディとターゲットの間に最大距離が存在するため)。また、私はあなたのステップは非常に大きくないとき(0,0)としてvelocityを設定するよりも良いが、ケースに直接体内にもちろん

else { 
     body.setTransform(target.getPosition().x, target.getPosition().y, body.getAngle()); 
    } 

をターゲットの位置を設定することであろうと推測する - その変更が見えなくなり、最終的な位置になりますターゲットの位置が正確に

関連する問題