プログラミングの課題の一環として、古典的なブレイクアウト ゲームを作成しようとしています。ユーザーのマウスクリックでボールを動かし始める必要があります。だから私はそれを達成するためにマウスリスナーを使用しています。以下のコードは、私がやろうとしていることの、より小さく単純なバージョンです。しかし、それはボールを徐々に動かしません。while ループの実行が完了した後、ボールを最終的な位置に表示するだけです。
import acm.graphics.*;
import acm.program.*;
import acm.util.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class BallMoveTest extends GraphicsProgram {
public void run() {
ball = new GOval(20,20);
ball.setFilled(true);
add(ball, 100, 100);
addMouseListeners();
}
public void mouseClicked(MouseEvent e) {
while (counter < 100) {
moveBall();
counter++;
pause(20);
}
}
public void moveBall(){
ball.move(2, 2);
}
// Private instance variables
private GOval ball;
private int counter = 1;
}
ただし、この代替コードは非常にうまく機能しますが、ユーザーがクリックしてボールの動きを開始することはできません。
import acm.program.*;
import acm.graphics.*;
public class TestGOval extends GraphicsProgram {
public void run() {
int counter = 1;
GOval ball = new GOval(20,20);
ball.setFilled(true);
add(ball,100,100);
while (counter < 100) {
ball.move(2, 2);
counter++;
pause(20);
}
}
}
ここで私が間違っていること、さらに重要なことに、最初のコードブロックが意図したとおりに機能しない理由を誰かが指摘できますか?
PS: これは私の最初の質問です。私はプログラミングの初心者です。できれば、私に優しくしてください。:)