2 つの移動オブジェクトを持つプログラム (AWT フレーム、はい、Swing の方が優れていることはわかっていますが、使用が制限されています) があります。そのため、オブジェクトを異なる速度で移動できるようにするために、それぞれを独自のスレッドに入れることを考えました。
1 つのスレッド ( gameThread
) は弾むボールを処理し、もう 1 つのスレッド ( )cannonThread
は画面に描かれた大砲とそれによって発射される発射物を処理します。ボールの速度と発射体の速度を分離する方法がわからなかったため、2 つのスレッドが機能すると考えました ( を使用thread.sleep(speedofobject)
)。
それらを実装する方法がわからず、私のランダムな推測 (明らかに) は機能しませんでした。画面には何も表示されず、コンパイル時にエラーは生成されません。以前は、ボールが画面に表示され、必要に応じて動き回っていました。
これは、複数のスレッドを実行しようとした場所のスニペットです。さらに情報が必要な場合はお知らせください。投稿します。
public void start()
{
if (gameThread == null)
{
gameThread = new Thread(this);
gameThread.start();
}
if (cannonThread == null)
{
cannonThread = new Thread(this);
cannonThread.start();
}
}
public void run()
{
//thread for the ball, collision detection and scorekeeping
if (Thread.currentThread().equals(gameThread))
{
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
while (!kill)
{
if (!paused)
{
target.repaint();
}
try
{
Thread.sleep(ballSpeed);
}
catch(InterruptedException e){System.err.println("Interrupted.");}
}
stop();
}
//thread for the cannon and projectile
if (Thread.currentThread().equals(cannonThread))
{
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
if (!paused)
{
if (projectileFiring)
{
cannon.repaint();
}
try
{
Thread.sleep(projectileSpeed);
}
catch(InterruptedException e){System.err.println("Interrupted.");}
}
}
}