2017-03-25 7 views
0

結果は単に画面の端からバウンス効果を引き起こしますが、オブジェクトは左右にツイッチしますが、右に動くのと同じまま左に移動しません。画面の端で速度を変更しようとしていません

これは、矩形を移動する方法です。彼らは移動し、

public void moveX (float x) { 
    if(rectangle.right >= Constants.SCREEN_WIDTH || rectangle.left <= 0){ 
     xVelocity = -xVelocity; 
    } 
    rectangle.left += x; 
    rectangle.right += x; 
} 

このメソッドは、単に更新方法で異なる四角形に適用される(ここでの入力は、複数のオブジェクトがあるので、それがこれを行い、if文で変更されているのと同じ「xVelocity」です)右にはうまくいきますが、私はその問題が何を回っているのか分かりません。

答えて

1

は、100のSCREEN_WIDTHを考慮し95のright値、および10

xVelocitymoveX(xVelocity)を呼び出します。

まず、xVelocityは、その後rightが再び105

コールmoveX(xVelocity)にインクリメントされ、変更されません。

xVelocityが-10に変更された場合、xが+10であるため、rightが115にインクリメントされます。

moveX(xVelocity)にもう一度お電話ください。

xVelocityが+10に変更された場合、xは-10であるため、rightは105にデクリメントされます。

これで、最初の呼び出しの後と同じ条件に戻りました。ブロックが画面の端で前後に揺れます。


これを防ぐには、使用できます。

if(rectangle.right >= Constants.SCREEN_WIDTH) { 
    xVelocity = -Math.abs(xVelocity); 
} else if (rectangle.left <= 0) { 
    xVelocity = +Math.abs(xVelocity); 
} 
関連する問題