Java 安第涅的TimerHandler每隔一段时间就会对精灵施放一次翅膀

Java 安第涅的TimerHandler每隔一段时间就会对精灵施放一次翅膀,java,android,andengine,Java,Android,Andengine,我在安德林使用这个时间引导器在特定时间繁殖精灵 mScene.registerUpdateHandler(new TimerHandler(0.02f, true, new ITimerCallback() { @Override public void onTimePassed(TimerHandler pTimerHandler) { addSpriteTime

我在安德林使用这个时间引导器在特定时间繁殖精灵

  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;
然后我有了一个方法,可以改变速度或下一个PriteTime

 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=100
addSpriteTime1=70
。直到这里,一切都很好,对吗?在另外五个
onTimePassed
调用中,将添加一个新的精灵

但现在您已将下一个Prite1Time更改为
60
addSpriteTime1
仍然是
70
,因为它大于60,所以永远不会添加新的精灵

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

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