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

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是执行上述任务之间的时间.

  • 通过总结增量时间直到它高于1000并且执行该方法并重置计时器,还有一个没有时间的替代方案.(在演员或演员的行为中执行此操作) (3认同)

lxk*_*vlk 6

我使用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)

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