我在andEngine中使用此TimerHandler在特定时间生成精灵。

  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);

一切都停止了,现在添加了精灵,

有人看到我在这方面出了问题吗,或者可以采取其他措施吗?

最佳答案

首先-您的speed方法中的日志消息不是错误-您为什么使用Log.e方法?那是出于错误...改用Log.d(调试)或Log.i(信息)。

回到你的问题。我不完全了解您的意思,但是我确实看到了一个问题:
可以说nextSprite1Time = 100addSpriteTime1 = 70。直到这里,一切都很好,对吧?在另外五个onTimePassed调用中,将添加一个新的sprite。

但是现在您将nextSprite1Time更改为60addSpriteTime1仍然是70,并且由于它大于60,因此永远不会添加新的精灵!

解决方案:使用>=而不是==,并且不要将计数器归零,而是从计数器中减少nextSpriteTime的值,例如,对于精灵1:

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

关于java - 间隔内的TimerHandler和引擎清理 Sprite ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8868038/

10-10 19:27