別のクラスのアニメーションループを使用して10ミリ秒ごとに投射物を移動しようとしています。このループの最初の2回の反復では、開始時にtime = 0であるため、最初のループでゼロにしかならない場合、重力は0に等しくなります。ここでJava:ループ内で二重計算されない
public static void move()
{
System.out.println("Time: " + time);
System.out.println("gravity: " + gravity);
System.out.println("g: " + g);
dX = Slingshot.getPullX();
dY = Slingshot.getPullY();
gravity = 0.5 * g * time * time;
newX = (double) Slingshot.getStart().x + time * c * dX;
newY = (double) Slingshot.getStart().y + (time * c * dY + gravity);
time = time + 1;
new Projectile(newX, newY, dX, dY);
trail = new Ellipse((int) newX + 5, (int) newY + 5);
trail.setColor(Color.RED);
trail.setSize(2, 2);
projectileTrail.add(trail);
}
は、ループの数回の反復の後に出力されます:
Time: 0.0
gravity: 0.0
g: 2.0
Time: 1.0
gravity: 0.0
g: 2.0
Time: 2.0
gravity: 1.0
g: 2.0
Time: 3.0
gravity: 4.0
g: 2.0
Time: 4.0
gravity: 9.0
g: 2.0
Time: 5.0
gravity: 16.0
g: 2.0
ちょうどtippとして:この行 'new Projectile(newX、newY、dX、dY);はほとんど何もしません。発射物を作り、それを使って何もしないので、それはガベージコレクションされるだけです。 –