2012-05-29 266 views
7

我有一個遊戲(如超級跳線,這個遊戲是一個跳躍的遊戲),我們的角色有生命。與敵人碰撞後,他的生命減少。我想在1秒後計算碰撞。我的意思是在這1秒內,如果我的角色與敵人接觸,什麼也沒有發生,他繼續他的方式。 爲此,我在我的GameScreen類中定義了一個布爾變量,名稱爲「collision」,另一個在Wolrd類中名爲「collBirds」。經過一次與敵方碰撞和collBirds接觸後變爲真。但是我想在1秒後碰撞改變爲假。我使用了幾個東西像System.currentTimeMillis()和「for循環」,並沒有發生任何事情。我在Java中並不擅長。設置延遲libgdx遊戲

這是我的情況:

if(World.collBirds == true && collition == false){ 
     life -= 1; 
     lifeString = "Life : " + life; 
     World.collBirds = false; 
     collition = true; 
     for (??? "need to stay here for 1 sec" ???) { 
      collition = false; 
     } 
    } 
+1

退房[這個問題](HTTP:/ /gamedev.stackexchange.com/questions/25001/waiting-specific-time-to-increase-sound-libgdx) –

+0

tnx您的回覆。我閱讀並使用它。但我在我的遊戲中改變了一些東西,最後它奏效了。 – Hosein

回答

0

如果你想這樣做,在同一個線程比你可以使用Thread.sleep()方法。但在這種情況下,您當前的線程將會凍結,如果這是單線程遊戲,那麼您的整個遊戲將會凍結。如果你不想讓你的遊戲凍結1秒,比你應該產卵的線程和線程調用睡眠和睡眠後,換旗

6

當第一次碰撞發生時,設置一個float timeSinceCollision = 0;

然後在每個循環中,您需要添加自從上次檢查到變量的時間,並檢查它是否超過一秒。

timeSinceCollision += deltaTime; 
if(timeSinceCollision > 1.0f) { 
    // do collision stuff 
} else { 
    // ignore the collision 
} 
+0

它只是第一次工作,碰撞後一點減少生活,但在其他時間,什麼也沒有發生...... – Hosein

+3

呃,重置timeSinceCollision //碰撞東西分支? – Ludevik

32

在某些情況下,你也可以想使用com.badlogic.gdx.utils.Timer

用法示例:

float delay = 1; // seconds 

Timer.schedule(new Task(){ 
    @Override 
    public void run() { 
     // Do your work 
    } 
}, delay);