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;

しかし、これは実際には正確ではなく、弾丸はランダムな速度のようです(最終ループの最終が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 に答える