【发布时间】:2011-10-31 17:13:23
【问题描述】:
基本上,我正在制作一个更新玩家位置的游戏,它使用这个线程:
@Override
public void run() {
while(true) {
System.out.println();
updatePos(x, y);
}
}
这很好用,但如果我删除 System.out.println(),它就会停止工作。不知道为什么会这样,全班如下:
public class Player extends Block implements KeyListener, Runnable {
int x;
int y;
int speed;
boolean upPressed;
boolean downPressed;
boolean rightPressed;
boolean leftPressed;
static Sprite sprite = new Sprite("grass.png");
public Player(int x, int y, int speed) {
super(x, y, sprite);
this.x = x;
this.y = y;
this.speed = speed;
Thread playerThread = new Thread(this, "Player Thread");
playerThread.start();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
y -= speed;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
downPressed = true;
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
rightPressed = true;
if (e.getKeyCode() == KeyEvent.VK_LEFT)
leftPressed = true;
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP)
upPressed = false;
if (e.getKeyCode() == KeyEvent.VK_DOWN)
downPressed = false;
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
rightPressed = false;
if (e.getKeyCode() == KeyEvent.VK_LEFT)
leftPressed = false;
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void run() {
while(true) {
System.out.println();
updatePos(x, y);
}
}}
最后说明:Ingore 布尔 upPresses 和 downPressed,我唯一关注的是:
if (e.getKeyCode() == KeyEvent.VK_UP) {
y -= speed;
}
【问题讨论】:
-
究竟是什么工作不正常?它运行吗?它是否进入updatePos?您可以使用断点来找出答案...
-
您接受了解决问题的答案。但是,您的代码未同步,并且无法在其他一些计算机上运行,因此您也应该修复同步问题。此外,从构造函数启动线程被认为是不好的做法。
标签: java multithreading