0
私はJavaで小さなゲームを書く方法を教えるyoutubeチュートリアルに従ってきました。私はビデオの男と全く同じコードを持っていますが、少し問題があります。KeyListenerを追加するとrepaint()が動作しない
public class Screen extends JPanel implements Runnable {
Thread thread = new Thread(this);
Frame frame;
int fps = 0;
int scene;
boolean running = false;
public Screen(Frame frame) {
this.setFocusable(true);
this.frame = frame;
frame.addKeyListener(new KeyHandler(this));
thread.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, this.frame.getWidth(), this.frame.getHeight());
if (scene == 0) {
g.setColor(Color.BLUE);
} else if (scene == 1) {
g.setColor(Color.GREEN);
} else {
g.setColor(Color.WHITE);
}
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.BLACK);
g.drawString(fps + "", 10, 10);
}
public void run() {
System.out.println("[Success] Frame Created!");
long lastFrame = System.currentTimeMillis();
int frames = 0;
running = true;
scene = 0;
while (running) {
repaint();
frames++;
if (System.currentTimeMillis() - 1000 >= lastFrame) {
fps = frames;
frames = 0;
lastFrame = System.currentTimeMillis();
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.exit(0);
}
問題は、私のフレームにKeyListenerを追加するとすぐにrepaint()が呼び出されないようです。 KeyListenerを削除すると動作します。標準のKeyListenerを使用すると問題が残るため、私の問題は私のKeyHandlerクラスではないと思います。