到目前为止,我已经让这个小程序进入了工作阶段;唯一的问题是它只有在鼠标移动时才有效;如果鼠标不动,那么整个事情就会停止。如果移动鼠标,它会再次开始工作。
它的工作方式是通过 mouseMoved 方法调用paint 方法。每次移动鼠标,它都会抛出paint方法,游戏继续进行。问题出在没有调用 mouseMoved 方法时,因此没有调用 paint 方法,整个事情只是暂停,直到鼠标移动。
我尝试了以下方法:
让paint方法是递归的,所以它会调用自己。这样做的问题是鼠标监听器不起作用,因为程序正忙于绘制一堆移动的东西。
我还尝试使用线程,以便鼠标侦听器会中断绘制方法。这不起作用,尽管这可能是因为我不了解线程是如何工作的。如果有人知道如何实现这一点,它似乎会起作用。
这是有问题的区域的代码片段;
public void paint( Graphics gr) {
if( Earth != null){
displayWorld(Earth);
for(int a =0; a < 100; a++){
Earth.run();
Earth.Worlds.get(2).forceMove(x,y);
}
try
{
Thread.sleep(100);
}
catch (InterruptedException ie)
{}
}
}
public void mouseMoved( MouseEvent e ) {
x = e.getX();
y = e.getY();
Graphics gr = getGraphics();
paint(gr);
}