これまでのところ、私はこのアプレットを実用的な段階にまで進めました。唯一の問題は、マウスが動いている場合にのみ機能することです。マウスを動かさないと、すべてが停止します。マウスを動かすと、再び機能し始めます。
それが機能する方法は、ペイント メソッドが mouseMoved メソッドによって呼び出されることです。マウスを動かすたびに、ペイント メソッドがスローされ、ゲームが続行されます。問題は、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);
}