我想調試一些空間入侵者類型遊戲的代碼,其中有20艘外星飛船,我們必須拍攝。遊戲顯示當前在屏幕上的船隻數量。當你射擊並摧毀一艘船時,每艘被摧毀的船隻的船舶總數應減1。因此,對於20艘船舶,當你拍攝全部20艘時,顯示器應該爲剩餘的船舶數量表示「0」。但是,由於某些原因,我不明白,當我拍攝所有20艘船時,顯示屏將顯示「-2」或「-3」,這對我來說沒有意義,因爲不能有負數的船隻。在線程遊戲中使用鎖
我試圖修復這個解決方案的ReentrantLock
,因爲這個遊戲使用多線程,但並不真正知道如何正確地做到這一點。下面是檢查是否一個外星飛船和子彈碰撞(也就是當船舶應被銷燬)段:
public void checkCollisions()
{
//check for alien ship and bullet collisions
for (AlienShip a : aships)
{
if (a.isAlive())
{
//check for bullet collisions
for (Bullet bullet : bullets)
{
if (bullet.isAlive())
{
//perform the collision test
if (a.getBounds().contains(bullet.getX(),
bullet.getY()))
{
bullet.setAlive(false);
a.setAlive(false);
shipLock.lock();
try
{
int shipCount = aliveShips;
shipCount--;
aliveShips = shipCount;
}
finally
{
shipLock.unlock();
}
continue;
}
}
}
}
}
很大程度上取決於哪些線程在您的系統中執行什麼操作。有更多的人調用這個方法嗎? – zapl