0
我有一個程序(AWT框架,是的,我知道Swing更好,但我受限於使用它)有2個移動對象。所以我想我會把它們放在它自己的線程中讓對象以不同的速度移動等。在java中使用併發線程
一個線程(gameThread
)處理彈跳球,另一個線程(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.");}
}
}
}
這是一個很好的觀點,所以只需要一個'updateBall'和'updateCannon'而不是每個線程。唯一我非常想知道的是如何獨立測量彈丸和球的速度。我使用'thread.sleep(value)'作爲球的速度,其中一個較小的'value'會使它移動得更快,反之亦然。有沒有一種好的方法可以在不使用'thread.sleep()'的情況下做到這一點,或者在一個線程中使用兩種對象的技巧? – zakparks31191
@ZakParks - 爲需要跟蹤的各種速度保持單獨的變量。保持某些標準單位的速度(例如像素/秒)。將相關速度乘以前一次更新所用的時間,以確定要應用的位移。這樣,您的視覺速度將受到速度變量的直接控制,而不是基於動畫循環時間而變化。 –
對我有意義,謝謝 – zakparks31191