我怎么能每一秒做一些事情? [LibGDX]

时间:2014-02-14 13:50:20

标签: java android libgdx

让我们说我想制作一个循环或打印出来的东西,例如“Mario”每秒。我怎样才能做到这一点?似乎找不到任何教导这个的好教程= P

3 个答案:

答案 0 :(得分:23)

正如@BennX所说,你可以总结你在渲染方法中的delta时间,或者通过调用Gdx.graphics.getDeltaTime();来获取它。如果它更大,那么1deltafloat,给出自上一帧绘制以来的秒数),您可以执行任务。使用timer = 0;而不是重置计时器,您可以使用timer -= 1减少计时器,这样您的任务就可以更准确地执行。因此,如果1个任务在1.1 seconds之后开始,那么下次在delta秒之后执行时,真正0.9会导致delta。 如果您不喜欢Timer.schedule(new Task(){ @Override public void run() { doWhatEverYouWant(); } } , delay // (delay) , amtOfSec // (seconds) ); 时间解决方案,则可以使用Libgdx计时器,而不是java.util.Timer。 一个例子:

doWhatEverYouWant()

这会在delay延迟之后执行seconds方法,然后每numberOfExecutions 。你也可以给它一个第三个参数{{1}},告诉它应该多久执行一次任务。如果您不提供该参数,则“永久”执行任务,直到它被取消。

答案 1 :(得分:10)

您可以使用java.util.Timer。

new Timer().scheduleAtFixedRate(task, after, interval);

任务是您要执行的方法,之后是第一次执行的时间量,间隔是执行上述任务之间的时间。

答案 2 :(得分:6)

我使用libgdx的TimeUtils在1.5秒后改变我的闪屏。代码是这样的:

初​​始化:

long startTime = 0;
创建方法中的

startTime = TimeUtils.nanoTime();

返回系统计时器的当前值,以纳秒为单位。

在update或render方法中:

if (TimeUtils.timeSinceNanos(startTime) > 1000000000) { 
// if time passed since the time you set startTime at is more than 1 second 

//your code here

//also you can set the new startTime
//so this block will execute every one second
startTime = TimeUtils.nanoTime();
}

出于某种原因,我的解决方案对我来说更优雅,那里提供的那些:)