Пока я довел этот апплет до рабочей стадии; Единственная проблема в том, что это работает, только если мышь движется; Если мышь не двигать, то все останавливается. Он снова начинает работать, если мышь перемещается.
Это работает так: метод рисования вызывается методом mouseMoved. Каждый раз, когда мышь перемещается, она переходит к методу рисования, и игра продолжается. Проблема возникает из-за того, что метод mouseMoved не вызывается, поэтому метод рисования не вызывается, и все просто приостанавливается, пока мышь не будет перемещена.
Я пробовал следующее:
Наличие рекурсивного метода рисования, поэтому он будет вызывать сам себя. Проблема в том, что тогда mouselistener не работает, потому что программа занята рисованием кучи движущихся вещей.
Я также пытался использовать потоки, чтобы mouselistener прерывал метод рисования. Это не сработало, хотя это могло быть потому, что я не понимаю, как работают потоки. Если кто-нибудь знает, как это реализовать, похоже, это сработает.
Вот фрагмент кода проблемных областей;
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);
}
Thread.sleep
в методе рисования. Это неправильное место для этого - person MadProgrammer   schedule 23.08.2012