2017-04-24 109 views
0

如何在libgdx中每60秒執行一次更新。我曾嘗試這個代碼,但實際上是「反」變爲0直接如何在libgdx中每60秒執行一次更新

公共無效更新(浮動三角洲){

stage.act(delta); 
    counter-=Gdx.graphics.getRawDeltaTime();; 
    if (counter==3) 
    { stage.addActor(oneImg); 
    } 
    else if(counter==2) 
    { 
     stage.addActor(twoImg); 

    } 
    else if(counter==1) 
    { stage.addActor(splashImg); 
    } 


} 
+0

切勿使用''==用浮動或雙的恆定除了0。 – Tenfour04

回答

1

是會出現這種情況。

這是因爲libgdx的getRawDelta時間方法返回浮點數值。當你從櫃檯扣除它們時,你可能永遠不會得到完全取整的數字,比如1,2,3.

所以,舉個例子,假設你的計數器是3.29,getRawDeltaTime返回了0.30。

如果你從3.29中扣除它,你將以2.99結束,因此你將永遠不會碰到你的if語句。

我會做到這一點的方式是

counter -= Gdx.graphics.getDeltaTime(); 

if(counter <= 3 && counter > 2) { 
    stage.addActor(oneImg); 
} else if(counter <= 2 && counter > 1) { 
    stage.addActor(twoImg); 
} else if(counter <= 1 && counter > 0) { 
    stage.addActor(splashImg); 
} 

我希望上面的解決方案是有道理的。

還有一件事要說明我在解決方案中留下了什麼。每個條件都會在我的解決方案中執行多次,而不僅僅是一次。

這是因爲當你可以說,計數器將具有值2.9一樣,2.87,即....直到時間的2和3之間 要解決這個問題,你需要使用一些布爾值。

定義一流水平boolean condition1, condition2, condition3;

修改if語句要像

if(counter <= 3 && counter > 2 && !condition1) { 
    stage.addActor(oneImg); 
    condition1 = true; 
} else if(counter <= 2 && counter > 1 && !condition2) { 
    stage.addActor(twoImg); 
    condition2 = true; 
} else if(counter <= 1 && counter > 0 && !condition3) { 
    stage.addActor(splashImg); 
    condition3 = true; 
} 
相關問題