Java libgdx 创建和显示秒表

And*_*rew 1 java timer libgdx

是否有任何正确的方法可以仅使用 java sdk 和 libGDX 中的库在 java 中创建和显示计时器?

我希望我的计时器从零开始并以分钟:秒等格式显示。

我目前正在使用解决方法,例如在渲染方法中添加增量时间并将totalTime / 60分钟和totalTime - minutes * 60秒转换为整数。

在此之前,我曾尝试将增量添加到秒,并在渲染方法中设置一个 if,将秒设置为 0,并在秒 >= 59.9f 时将分钟增加 1。这两种方法都非常低效,也不是很准确。我的计时器在接近一分钟结束时跳过几秒钟,或者显示 60 秒,然后增加分钟并重置秒数,例如 1:59、1:60 和 2:00。

我搜索了所有文档和互联网,但没有找到正确显示时间的方法(不是有巨大缺陷的解决方法)。你怎么能以专业的方式做到这一点?

我不认为 AAA 游戏会认真地做这些事情……有没有人认为人们可能需要在 java 或 libGDX 中使用倒数计时器(至少可以在不显示 1:60 的情况下工作)?

Ten*_*r04 5

很难准确地遵循您尝试过的内容,因此我不确定您在哪里失去了准确性,但这可能与您在计算中放置整数的位置有关。

通常,时钟显示完整的秒数,因此将总时间舍入为整数。每帧应重新计算分钟和秒。除了显示人类可读版本的 之外,它们没有任何用途totalTime,因此无需将它们保留在成员变量中。totalTime应该保持不圆角,以保持准确。

//Member variable:
float totalTime = 5 * 60; //starting at 5 minutes

void render(){
    float deltaTime = Gdx.graphics.getDeltaTime(); //You might prefer getRawDeltaTime()

    totalTime -= deltaTime; //if counting down

    int minutes = ((int)totalTime) / 60;
    int seconds = ((int)totalTime) % 60;

    //...
}
Run Code Online (Sandbox Code Playgroud)

6年后编辑:

为了避免将一堆小浮点增量时间相加而产生的舍入误差,我将存储系统时钟开始时间并重新计算每帧经过的时间,如下所示:

// Reset this to System.currentTimeMillis() when starting over.
private long startTime = System.currentTimeMillis();

void render(){
    long totalTime = (startTime - System.currentTimeMillis()) / 1000;

    int minutes = totalTime / 60;
    int seconds = totalTime % 60;

    //...
}
Run Code Online (Sandbox Code Playgroud)