我制作此代码
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 :(得分: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();
}