2012-01-15 110 views
3

我用這TimerHandler在andEngine產卵在特定的時間精靈..TimerHandler在andengine spawing精靈在間隔

mScene.registerUpdateHandler(new TimerHandler(0.02f, true, new ITimerCallback() { 
        @Override 
        public void onTimePassed(TimerHandler pTimerHandler) { 
          addSpriteTime1 += 2; // because timer update = 0.02 seconds 
          if (addSpriteTime1 == nextSprite1Time) { 
            addFace(); 
            addSpriteTime1 = 0; 
          } 

          addSpriteTime2 += 2; 
          if (addSpriteTime2 == nextSprite2Time) { 
           addFace2(); 
            addSpriteTime2 = 0; 
          } 

          addSpriteTime3 += 2; 
          if (addSpriteTime3 == nextSprite3Time) { 
            addFace3(); 
            addSpriteTime3 = 0; 
          } 
        } 
      })); 

現在我已經在類級別聲明INT變量..

private int nextSprite1Time = 100;// initial value, could be changed during game 
private int nextSprite2Time = 100; 
private int nextSprite3Time = 100; 

然後我有一個方法可以讓我改變速度或nextSpriteTimes。

private void speed(int f, int g, int h){ 

    this.nextSprite1Time = f; 
    this.nextSprite2Time = g; 
    this.nextSprite3Time = h; 
    Log.e("Time Changed", String.valueOf(this.nextSprite1Time+ "," + this.nextSprite2Time + ","+ this.nextSprite3Time)); 

    } 

問題是,當我試圖改變例如速度..

speed(30, 50, 70); 

它只是停止所有一起,現在精靈加入,

有誰看到我要去的地方這個錯誤還是可以做到這一點?

回答

2

首先 - 你的日誌信息在speed方法是不是出錯 - 你爲什麼用Log.e方法?這是錯誤的...使用Log.d(調試)或Log.i(信息)來代替。

回到你的問題。我不明白你的意思,但我確實看到一個問題: 可以說nextSprite1Time = 100addSpriteTime1 = 70。直到這裏,一切都很好,對嗎?在另外五個調用中,將添加一個新的精靈。

但是現在您將nextSprite1Time更改爲60addSpriteTime1仍然70,並且因爲它大於60它會從來沒有添加一個新的精靈!

解決方案:使用>=代替==,並沒有計數器歸零,但是從他們減少nextSpriteTime的值,例如,對於精靈1:

addSpriteTime1 += 2; 
if(addSpriteTime1 >= nextSprite1Time) { 
    addFace(); 
    addSpriteTime1 -= nextSprite1Time; 
}