グラフィックウィンドウの下部と上部でGOvalボールをバウンドさせ、ウィンドウを終了するまで何度も上下にバウンドさせる単純なアニメーションを作成しようとしています。問題は、ボールがグラフィックウィンドウの下部を認識し、反対方向にバウンドし始める方法がわからないことです。言い換えれば、ボールが床に跳ね返ることはなく、落下し続け、最終的に画面の下部から消えます。
i <STEPSである限り、ボールが下に移動するというのは、この問題について考える正しいアプローチですか。ボールが跳ね返ってからまた下がる条件がわかりません。
import acm.program.*;
import acm.graphics.*;
public class BouncingBall extends GraphicsWindow{
public void run(){
GOval ball = new GOval(0, 0, OVAL_SIZE, OVAL_SIZE);
ball.setFilled(true);
add(ball);
int dx = 0;
int dy = 1;
while(true) {
int i = 0;
if ( i < STEPS) {
ball.move(dx, dy);
pause(PAUSE_TIME);
}
if (??) {
ball.move(dx, - dy);
pause(PAUSE_TIME);
}
i++;
}
}
private static final STEPS = 1000;
private static final OVAL_SIZE = 25;
private static final PAUSE_TIME = 7;
}