2016-01-10 46 views
1

我對Java和LibGDX有點新,我正在開發基於點的遊戲。我面臨的問題是更新方法不斷運行我想要及時運行的內容。在我的更新方法中,如果獲得積分,我有代碼來增加分數,並在玩家輸掉時使失敗狀態出現。沒有進入的細節,這裏是僞代碼,我有:
LibGDX在更新方法中做一些事情

protected void update(float dt){ 

    for(Thing x : a list) { 

     x.update(dt); 

     //continue 
     if (you complete the objective of the game) { 
      score++; 
      //do other stuff 
     } 


     //lost 
     if (you fail to complete the objective){ 
      make lose state come up 
     } 
    } 

//I want something like this to run: 
if(score >=0 && score <=10){ 
    do something ONCE(ie. print to console once) 
} 
if(score >= 11 && score <=15){ 
    do something once 
} 
if(ect...){ 
    do something else once 
} 
. 
. 
. 

這裏的問題是,如果IF條件滿足時,我注意到IF塊被多次執行速度非常快(即印刷。控制檯很多)。我已經將依賴於得分的代碼的細節放在一個單獨的類中,我只想從這個更新方法中調用該方法,並根據得分條件運行一次(即,如果分數滿足另一個IF語句)

回答

0

update()方法每幀被調用一次,在無限循環中非常快速地(通常每秒60次)多次調用該方法。這不僅僅是libGDX特有的,在任何遊戲引擎中都是如此。並且當您的if塊的某些條件評估爲true時,該if塊將每幀執行一次,直到該條件再次變爲false。但是你想在條件改變後只執行一次塊。

只需聲明一個名爲isLastScoreUnder10或變量的變量,並在if塊之後更新它。像這樣:

private boolean isLastScoreUnder10 = false; 

protected void update(float dt){ 

    if(!isLastScoreUnder10 && score >=0 && score <=10){ 
     isLastScoreUnder10 = true; 

     // ..do something 

    } else { 
     isLastScoreUnder10 = false; 
    } 
} 
1

我有同樣的問題,但我通過使用下面的方法解決了它。在Libgdx中,更新方法在1/60秒內運行。這就是連續渲染方法的原因,if條件將執行不同的時間。 要解決此問題,只需在create方法中聲明一個整數變量,如count

public static int count; 
public static void create() 
{ 
    count =0; 
    // do other stuffs 
} 
protected void update(float dt){ 
    // just increment this count value in your update method 
    for(Thing x : a list) { 
     count++ 
     x.update(dt); 
     //continue 
     if (you complete the objective of the game) { 
      score++; 
      //do other stuff 
     } 
     //lost 
     if (you fail to complete the objective){ 
      make lose state come up 
     } 
    } 
    // and make a small condition to run the if condition only once by using the declared variable "count". 
    if(count%60==0){ 
     // here the condition only executes when the count%60==0.that is only once in 1/60 frames. 
     if(score >=0 && score <=10){ 
     } 
     if(score >= 11 && score <=15){ 
     } 
     if(ect...){ 
     } 
    } 

。 。 。這就是我解決同樣問題的方法。

相關問題