【问题标题】:TimerHandler in andengine spawing sprites at a interval和引擎中的 TimerHandler 间隔生成精灵
【发布时间】:2012-01-15 06:47:23
【问题描述】:

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

它只是一起停止,现在添加了精灵,

有没有人知道我在哪里做错了或者可以做不同的事情?

【问题讨论】:

    标签: java android andengine


    【解决方案1】:

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

    回到你的问题。我不明白你的意思,但我确实看到了一个问题: 可以说nextSprite1Time = 100addSpriteTime1 = 70。到这里为止,一切都很好,对吧?在另外五个onTimePassed 调用中,将添加一个新的精灵。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多