【发布时间】:2013-05-23 20:03:04
【问题描述】:
我正在用java做乒乓球
如果球出界,pause 设置为true:
if (ball.getX() <= 0) {
score2++;
pause = true;
}
if (ball.getX() >= this.getWidth()-ballWidth) {
score1++;
pause = true;
}
应该让计时器休眠...在线程休眠 1000 毫秒后,pause 将设置为 false,并且球应该继续移动 (ball.autoMove()):
public void timer() {
int initialDelay = 1000;
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (pause) {
try {
ball.reset(width/2, height/2);
Thread.sleep(1000);
pause = false;
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
ball.autoMove(velocityX, velocityY);
collisionCheck();
}
}, initialDelay, 100);
}
Ball 类 AutoMove() 函数:
public void autoMove(double velX, double velY) {
xLoc = this.getX()+velX;
yLoc = this.getY()+velY;
}
它会完成所有这些...它会休眠,暂停设置为 false,等等...但是当球在暂停 1 秒后重置(在屏幕中间重置...)时,它跳到游戏面板的另一边,告诉我当线程“休眠”时,ball.autoMove(velocityX, velocityY); 仍在更新坐标。
为什么会这样?那不应该运行吗?
谢谢!
【问题讨论】:
-
永远不要在 EDT 中睡觉,尝试使用 Swing 计时器
-
ball.autoMove()中有什么内容? -
什么是
EDT?谢谢 -
您确定
width和height设置正确吗? -
EDT是事件调度线程。阅读更多:stackoverflow.com/questions/7217013/…