让我们说我想制作一个循环或打印出来的东西,例如“Mario”每秒。我怎样才能做到这一点?似乎找不到任何教导这个的好教程= P
答案 0 :(得分:23)
正如@BennX所说,你可以总结你在渲染方法中的delta
时间,或者通过调用Gdx.graphics.getDeltaTime();
来获取它。如果它更大,那么1
(delta
是float
,给出自上一帧绘制以来的秒数),您可以执行任务。使用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();
}
出于某种原因,我的解决方案对我来说更优雅,那里提供的那些:)