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

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

【问题讨论】:

  • 如果您想充分利用 Android,请使用 AsyncTask、线程或服务。但如果你只想打印出“hello mario”或其他内容,请 google 更多。

标签: java android libgdx


【解决方案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();
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2019-12-10
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多