2012-01-15 60 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; 
}