2016-11-04 2 views
0

別のクラスのアニメーションループを使用して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 
+0

ちょうどtippとして:この行 'new Projectile(newX、newY、dX、dY);はほとんど何もしません。発射物を作り、それを使って何もしないので、それはガベージコレクションされるだけです。 –

答えて

3

あなたがそれらを計算している前に、結果を印刷しているので、第二のループは、あなたが最初に計算するもの見せています。

printlnをループの最後に移動するだけです。

+0

ありがとう、私は、私のエラーが何であったかを調べるために値を印刷していたので、重力がゼロであると私のエラーを引き起こしていると思っていました。それは他の場所のように見えます! – Andrew