我怎么能每秒都做某事? [LibGDX]

Posted

技术标签:

【中文标题】我怎么能每秒都做某事? [LibGDX]【英文标题】:How can I do something every second? [LibGDX] 【发布时间】:2014-03-13 22:05:29 【问题描述】:

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

【问题讨论】:

***.com/questions/12908412/… 怎么样? 如果您想充分利用 android,请使用 AsyncTask、线程或服务。但如果你只想打印出“hello mario”或其他内容,请 google 更多。 【参考方案1】:

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

Timer.schedule(new Task()
                @Override
                public void run() 
                    doWhatEverYouWant();
                
            
            , delay        //    (delay)
            , amtOfSec     //    (seconds)
        );

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

【讨论】:

【参考方案2】:

你可以使用 java.util.Timer。

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

task 是您要执行的方法,after 是距离第一次执行的时间量,interval 是上述任务执行之间的时间。

【讨论】:

还有一种没有时间的替代方法,将增量时间相加直到超过1000,然后执行该方法,并重置计时器。 (在演员的渲染或动作中执行此操作)【参考方案3】:

我使用 libgdx 的 TimeUtils 在 1.5 秒后更改了我的启动画面。代码是这样的:

初始化:

long startTime = 0;

在创建方法中:

startTime = TimeUtils.nanoTime();

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

在更新或渲染方法中:

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();

查看 libgdx API:TimeUtils

由于某种原因,我的解决方案似乎比这里提供的解决方案更优雅 :)

【讨论】:

以上是关于我怎么能每秒都做某事? [LibGDX]的主要内容,如果未能解决你的问题,请参考以下文章

LibGDX - 向上滑动或向右滑动等?

在 mac 10.9 中安装 libgd 时出错

将 spritesheet 中的精灵存储在数组 Libgdx 中

安装libgd库make: *** [all-recursive] Error 1

LibGdx - 屏幕之间的转换

Linux libgd库的安装