【发布时间】:2017-09-23 12:30:46
【问题描述】:
所以我关注了一个 youtube 教程,该教程教你如何用 Java 编写一个小游戏。即使我的代码与视频中的那个人完全相同,但我还是有一点问题。
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);
}
问题是似乎 repaint() 在我将 KeyListener 添加到我的框架后并没有被调用。如果删除 KeyListener,它会起作用。我认为问题不在于我的 KeyHandler 类,因为如果我使用标准 KeyListener,问题仍然存在。
【问题讨论】:
标签: java keylistener repaint