如何在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();
}
我有这个问题,我知道这是晚,但也许它会帮助别人。问题是,当创建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();
}
我有这个确切的问题,你的建议(叫timer.delay)像一个魅力工作,谢谢@KnowNothing! – fegemo 2016-11-18 21:47:39
没问题!很高兴为你工作。 – KnowNothing 2016-12-03 22:46:58
与我们分享您的flyAway()代码。 – 2014-11-21 14:01:57
完成.......... – KajeNick 2014-11-21 15:58:43
代码对我来说看起来很好。尝试打印任务的'getExecuteTimeMillis()'(请参阅https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/utils/Timer.java#L192) )'和'start()'(它应该在任务运行前显示毫秒) – 2014-11-22 06:59:38