1

我需要计算子弹的 X 和 Y 速度(子弹将通过这些移动每个“更新”),所以我有以下

public int[] getXandYSpeed(int pointOfOriginX, int pointOfOriginY, int aimToX, int aimToY){
  int[] coords = new int[2];
  aimToX = aimToX - pointOfOriginX;
  aimToY = aimToY - pointOfOriginY;

  while((aimToX + aimToY) > 5){
    aimToX = aimToX/2;
    aimToY = aimToY/2;
  }

  coords[0] = aimToX;
  coords[1] = aimToY;
  return coords;

但是,这不是很准确,子弹有随机速度(如果最终循环中的 final 是 aimToX 加上 AimToY 等于 6 所以(每个都是 3)所以最终速度将是 x=1 和 y=1,如果最终循环等于 4比它会像 x=2 和 y=2 一样结束,这很重要)

所以,问题是,如何让它变得更好?

4

1 回答 1

1

如果你想让子弹在任何角度以恒定的速度行进,你真的想要更像这样的东西。此外,来自@JSlain 的关于使用 double 的评论也很准确,即使您在绘制/渲染子弹时必须四舍五入这些值,它们也会更加准确

public double[] getSpeed(int sx, int sy, int ex, int ey)
{
    double dx = ex - sx;
    double dy = ey - sy;

    double theta = Math.atan2(dy, dx); //get the angle your bullet will travel

    int bulletSpeed = 5; //how fast your bullet can go.

    double[] speeds = new double[2];

    speeds[0] = Math.cos(theta) * bulletSpeed;
    speeds[1] = Math.sin(theta) * bulletSpeed;

    return speeds;
}
于 2014-09-11T16:06:18.440 回答