刚学Java,菜鸟都算不上……在做一个2048的小游戏,然后加上一个超简易AI的时候就出BUG了……求解答
@Override
public void keyPressed(KeyEvent e) {
// TODO 反射
coreControl.AI();
switch (e.getKeyCode()) {
case KeyEvent.VK_UP: coreControl.keyUp(); break;
case KeyEvent.VK_DOWN: coreControl.keyDown(); break;
case KeyEvent.VK_LEFT: coreControl.keyLeft(); break;
case KeyEvent.VK_RIGHT: coreControl.keyRight(); break;
case KeyEvent.VK_W: coreControl.keyW();break;
case KeyEvent.VK_A: coreControl.AI();break;
default: break;
}
}
然后AI() 是这么写的
public void AI() {
while (!Img.isLost) {
if(!Img.isLost) {
keyRight();
System.out.println("Right");
}
if(!Img.isLost) {
keyDown();
System.out.println("Down");
}
if(!Img.isLost) {
System.out.println("Left");
keyLeft();
}
if(!Img.isLost) {
System.out.println("Up");
keyUp();
}
}
}
可以看到,两段代码实际上调用的是同一套方法
结果按键操作时可以正常刷新。而当按下A键,调用AI时,窗口就不会刷新了,经过排除,发现是调用repaint时出现问题。repaint没有调用我重写的paintComponent方法。
最神奇的时,当我把AI()放在AI()所在的类的构造器中,由程序自动调用,然后就可以正常跑了……
这是正常运行图片,分数正常刷新
![图片说明](https://img-ask.csdn.net/upload/201611/28/1480344496_620052.png)
然后这个是不正常的,分数一直停留在初始的0,经测试,paintComponent方法从未被调用
![图片说明](https://img-ask.csdn.net/upload/201611/28/1480344536_213789.png)