我正试图在一个连续的循环中移动一个方块,在循环运行时留下一条痕迹(想想BMtron游戏),但当我使用我的keylistener移动方块时,屏幕会冻结,尽管循环继续运行,但对象不会移动。这是一个片段:
public void keyPressed(KeyEvent e) {
//System.out.println("keyPressed");
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
//moveRight();
//down.start();
U = false;
D = false;
L = false;
R = true;
while (R = true) {
x = x + 2;
repaint();
System.out.println("Right");
}
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
R = false;
U = false;
D = false;
L = true;
while (L = true) {
//moveLeft();
x = x - 2;
repaint();
System.out.println("Left");
}
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
R = false;
U = false;
L = false;
D = true;
while (D = true) {
//moveDown();
y = y + 2;
repaint();
System.out.println("Down");
}
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
R = false;
D = false;
L = false;
U = true;
//System.out.println("");
while (U = true) {
y = y - 2;
repaint();
System.out.println("Up");
}
}
}
如果你想要整个代码,请告诉我。
答案 0 :(得分:3)
在Java中,赋值的表达式返回赋值的值。注意你的循环:
while(R = true)
↑
你需要比较而不是分配。
您的循环将始终执行,因为它就像写while(true)
(true
是指定值),并且您将运行一个冻结程序的无限循环。这就是为什么我们非常建议在比较布尔值时不使用==
和!=
,它可以防止可能的错误。相反,只需写下:
while(R) //same as while(R == true) but please don't use ==