Java 如何在LibGDX中暂停计时器延迟秒
我做这个代码Java 如何在LibGDX中暂停计时器延迟秒,java,android,libgdx,Java,Android,Libgdx,我做这个代码 Timer.schedule(new Task(){ @Override public void run() { flyAway(); } }, 12); 当我的游戏暂停时,我用画法(演员) 在恢复游戏时,我会这样做: Timer.instance().start(); 它可以工作,但当我暂停2秒并在35秒后恢复时,函数flyAway()立即执行,不包括剩余的10秒 我怎么能在几秒
Timer.schedule(new Task(){
@Override
public void run() {
flyAway();
}
}, 12);
当我的游戏暂停时,我用画法(演员)
在恢复游戏时,我会这样做:
Timer.instance().start();
它可以工作,但当我暂停2秒并在35秒后恢复时,函数flyAway()立即执行,不包括剩余的10秒
我怎么能在几秒钟内完成。谢谢
对不起,我的英语不好
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();
}
我有这个问题,我知道这已经晚了,但也许它会帮助其他人。问题是,当创建
计时器时,系统时钟会给它一个执行时间,而不是给它指定的执行时间。因此,当您在pause
方法中调用Timer.stop
时,请等待35秒,然后在resume
方法中调用Timer.start
,任务本应完成的时间已经过去,因此立即执行
我的解决方案就是在暂停时保存当前系统的时间,然后从恢复时的当前时间中减去它,然后在再次调用计时器.start()
之前,使用计时器.delay()
将差值作为延迟添加到计时器中
public void pause() {
timerDelay = TimeUtils.nanosToMillis(TimeUtils.nanoTime());
Timer.stop();
}
public void resume() {
Timer.delay(TimeUtils.nanosToMillis(TimeUtils.nanoTime()) - timerDelay);
Timer.start();
}
我有这个问题,我知道这已经晚了,但也许它会帮助其他人。问题是,当创建计时器时,系统时钟会给它一个执行时间,而不是给它指定的执行时间。因此,当您在pause
方法中调用Timer.stop
时,请等待35秒,然后在resume
方法中调用Timer.start
,任务本应完成的时间已经过去,因此立即执行
我的解决方案就是在暂停时保存当前系统的时间,然后从恢复时的当前时间中减去它,然后在再次调用计时器.start()
之前,使用计时器.delay()
将差值作为延迟添加到计时器中
public void pause() {
timerDelay = TimeUtils.nanosToMillis(TimeUtils.nanoTime());
Timer.stop();
}
public void resume() {
Timer.delay(TimeUtils.nanosToMillis(TimeUtils.nanoTime()) - timerDelay);
Timer.start();
}
我有这个问题,我知道这已经晚了,但也许它会帮助其他人。问题是,当创建计时器时,系统时钟会给它一个执行时间,而不是给它指定的执行时间。因此,当您在pause
方法中调用Timer.stop
时,请等待35秒,然后在resume
方法中调用Timer.start
,任务本应完成的时间已经过去,因此立即执行
我的解决方案就是在暂停时保存当前系统的时间,然后从恢复时的当前时间中减去它,然后在再次调用计时器.start()
之前,使用计时器.delay()
将差值作为延迟添加到计时器中
public void pause() {
timerDelay = TimeUtils.nanosToMillis(TimeUtils.nanoTime());
Timer.stop();
}
public void resume() {
Timer.delay(TimeUtils.nanosToMillis(TimeUtils.nanoTime()) - timerDelay);
Timer.start();
}
我有这个问题,我知道这已经晚了,但也许它会帮助其他人。问题是,当创建计时器时,系统时钟会给它一个执行时间,而不是给它指定的执行时间。因此,当您在pause
方法中调用Timer.stop
时,请等待35秒,然后在resume
方法中调用Timer.start
,任务本应完成的时间已经过去,因此立即执行
我的解决方案就是在暂停时保存当前系统的时间,然后从恢复时的当前时间中减去它,然后在再次调用计时器.start()
之前,使用计时器.delay()
将差值作为延迟添加到计时器中
public void pause() {
timerDelay = TimeUtils.nanosToMillis(TimeUtils.nanoTime());
Timer.stop();
}
public void resume() {
Timer.delay(TimeUtils.nanosToMillis(TimeUtils.nanoTime()) - timerDelay);
Timer.start();
}
与我们共享您的flyAway()代码。代码在我看来很好。请在stop()
和start()
时尝试打印任务的getExecuteMemillis()
(请参阅)(在任务运行前应显示毫秒)。与我们共享您的flyAway()代码。我觉得代码不错。请在stop()
和start()
时尝试打印任务的getExecuteMemillis()
(请参阅)(在任务运行前应显示毫秒)。与我们共享您的flyAway()代码。我觉得代码不错。请在stop()
和start()
时尝试打印任务的getExecuteMemillis()
(请参阅)(在任务运行前应显示毫秒)。与我们共享您的flyAway()代码。我觉得代码不错。尝试打印任务的getExecuteTimeMillis()
(请参阅)当您stop()
和start()
(它应该显示在任务运行之前的毫秒)。我遇到了这个问题,您的建议(调用timer.delay)非常有效,谢谢@KnowNothing!现在我相信,从libgdx 1.9.8开始,它的Timer.instance()延迟(long)就已经在使用了。我有一个确切的问题,你的建议(调用Timer.delay)非常有效,谢谢@KnowNothing!现在我相信,从libgdx 1.9.8开始,它的Timer.instance()延迟(long)就已经在使用了。我有一个确切的问题,你的建议(调用Timer.delay)非常有效,谢谢@KnowNothing!现在我相信,从libgdx 1.9.8开始,它的Timer.instance()延迟(long)就已经在使用了。我有一个确切的问题,你的建议(调用Timer.delay)非常有效,谢谢@KnowNothing!我现在相信,从libgdx1.9.8开始,它的Timer.instance().delay(long)正在使用中