如何在LibGDX中暂停Timer delaySeconds

时间:2014-11-21 13:19:54

标签: java android libgdx

我制作此代码

Timer.schedule(new Task(){
        @Override
        public void run() {             
            flyAway();
        }
}, 12);

当我的游戏暂停时,我在绘制方法(演员)中执行此操作

Timer.instance().stop();

在简历游戏中,我这样做:

Timer.instance().start();

有效,但是当我暂停2秒并在35秒后恢复时,立即执行flyAway()函数,不计算剩余的10秒。

我如何暂停delaySeconds。感谢。

抱歉我的英语不好。

FlyAvay代码

//Муха улетает
public void flyAway(){
    flyAway = 1;

    targetFlyX = Gdx.graphics.getWidth() / 2;
    targetFlyY = Gdx.graphics.getHeight() + 300;
    this.setColor(1f, 1f, 1f, 0.2f);
    this.addAction(sequence(moveTo(targetFlyX, targetFlyY, flySpeed), desctroyFlyAction));      
}

Action desctroyFlyAction = new Action(){
    public boolean act( float delta ) {
        removeFly();
        return true;
    }
};

public void removeFly(){
    rectBounds.set(1, 1, 0, 0);
    this.remove();
}

1 个答案:

答案 0 :(得分:3)

我遇到了这个问题,我知道这已经很晚了,但也许它会帮助别人。问题在于,当创建Timer时,系统的时钟会被执行而不是指定的时间,直到执行为止。因此,当您在Timer.stop方法中调用pause时,请等待35秒,然后在Timer.start方法中调用resume,该任务应该完成的时间已经过去所以它立刻被执行了。

我的解决方案只是将当前系统的时间保存在pause上,然后从resume上的当前时间中减去它,并使用{Timer将差异作为延迟添加到Timer.delay() {1}}再次致电Timer.start()之前。

public void pause() {
    timerDelay = TimeUtils.nanosToMillis(TimeUtils.nanoTime());
    Timer.stop();
}

public void resume() {
    Timer.delay(TimeUtils.nanosToMillis(TimeUtils.nanoTime()) - timerDelay);
    Timer.start();
}