如何在LibGDX暂停定时器delaySeconds

问题描述:

我做这个代码如何在LibGDX暂停定时器delaySeconds

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(); 
} 
+0

与我们分享您的flyAway()代码。 – 2014-11-21 14:01:57

+0

完成.......... – KajeNick 2014-11-21 15:58:43

+0

代码对我来说看起来很好。尝试打印任务的'getExecuteTimeMillis()'(请参阅https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/utils/Timer.java#L192) )'和'start()'(它应该在任务运行前显示毫秒) – 2014-11-22 06:59:38

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

我的解决办法只是保存当前系统时间pause,然后从当前时间减去它resume,并再次调用Timer.start()之前添加的差作为延迟使用Timer.delay()Timer

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

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

我有这个确切的问题,你的建议(叫timer.delay)像一个魅力工作,谢谢@KnowNothing! – fegemo 2016-11-18 21:47:39

+0

没问题!很高兴为你工作。 – KnowNothing 2016-12-03 22:46:58