Cod*_*Nub 8 java android libgdx
让我们说我想制作一个循环或打印出来的东西,例如"马里奥"每秒.我怎样才能做到这一点?似乎无法找到任何教导这个地方的好教程= P.
Spr*_*bua 24
正如@BennX所说,你可以总结delta你在渲染方法中的时间或通过调用获得它Gdx.graphics.getDeltaTime();.如果它大于1(delta是a float,给出自上一帧绘制以来的秒数),则可以执行任务.而不是通过使用重置您的计时器可以通过使用timer = 0;减少它timer -= 1,因此您的任务执行更准确.因此,如果1个任务在之后开始1.1 seconds,则在下一次执行之后,下一次执行时会导致非常大delta的原因0.9.如果您不喜欢delta时间解决方案,可以使用Libgdx计时器,而不是java.util.Timer.一个例子:
Timer.schedule(new Task(){
@Override
public void run() {
doWhatEverYouWant();
}
}
, delay // (delay)
, amtOfSec // (seconds)
);
Run Code Online (Sandbox Code Playgroud)
这执行doWhatEverYouWant()一个方法后延迟的delay,然后每个和seconds 秒.你也可以给它一个第三个参数numberOfExecutions,告诉它应该多久执行一次任务.如果您不提供该参数,则任务将"永久"执行,直到它被取消.
tim*_*117 10
您可以使用java.util.Timer.
new Timer().scheduleAtFixedRate(task, after, interval);
Run Code Online (Sandbox Code Playgroud)
task是您要执行的方法,之后是第一次执行的时间量,interval是执行上述任务之间的时间.
我使用libgdx的TimeUtils在1.5秒后改变我的闪屏.代码是这样的:
初始化:
long startTime = 0;
Run Code Online (Sandbox Code Playgroud)
在create方法中:
startTime = TimeUtils.nanoTime();
Run Code Online (Sandbox Code Playgroud)
返回系统计时器的当前值,以纳秒为单位.
在更新或渲染方法中:
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();
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我的解决方案对我来说更优雅,那里提供的那些:)