libgdx box2d body - 为什么身体在到达接触点位置后会发抖?

时间:2016-07-07 07:13:37

标签: java libgdx 2d physics

问题

  

如果子弹到达目的地,身体正在颤抖,从目的地到前一个位置后退并再回到堡垒   目的地......等等... 奇怪的行为

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

1 个答案:

答案 0 :(得分:2)

您的DEFINED_PRECISION可能太低了 - 您应该在每个步骤中注销body's位置(即使在您的循环中添加System.out.println(body.getPosition());之类的东西)并检查它是否更大。< / p>

那时情况就是

  1. 正文位于目标点之前且distance大于DEFINED_PRECISION所以它正在向前移动
  2. 正文位于目标点之后且distance大于DEFINED_PRECISION所以正在移动向后
  3. 正文位于目标点之前且distance大于DEFINED_PRECISION ...
  4. 这就是为什么它在颤抖:)

    首先,您应该更改DEFINED_PRECISION - 检查在一个框架中移动多少身体,此值除以2应为{{1} (因为在两帧之间存在身体和目标之间的最大距离)。另外我想这比设置DEFINED_PRECISION更好,因为velocity会将目标的位置设置为直接

    (0,0)

    当然,如果您的步骤不是很大 - 那么更改将是不可见的,最终位置将完全是目标位置