我怎么能每秒都做某事? [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();
来获取它。如果它大于1
(delta
是float
,给出自上一帧绘制以来的秒数),您可以执行您的任务。您可以使用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]的主要内容,如果未能解决你的问题,请参考以下文章
将 spritesheet 中的精灵存储在数组 Libgdx 中