首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java创建和显示StopWatch

Java创建和显示StopWatch
EN

Stack Overflow用户
提问于 2014-09-12 13:18:31
回答 2查看 3.8K关注 0票数 1

是否有适当的方法在java中创建和显示计时器,只使用libGDX的java和库?

我希望我的计时器从零开始,以像分钟:秒这样的格式显示。

目前,我正在使用一些解决方法,比如在render方法中添加增量时间,并将totalTime / 60转换为整型数分钟,将totalTime - minutes * 60转换为几秒钟。

在此之前,我尝试将增量添加到秒,并在呈现方法中有一个if,该方法将秒设置为0,并在秒>= 59.9f时将分钟增加1。这两种方法效率都很低,而且不太准确。我的计时器在接近一分钟结束时跳过秒,或者显示60秒,然后增加分钟并重置秒,比如1:59、1:60和2:00。

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

我不认为AAA游戏是认真的.有没有人想过,人们可能需要像java或libGDX中的倒计时器(至少不显示1:60 )?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-12 14:27:26

很难准确地理解你尝试过的内容,所以我不知道你在哪里失去了准确性,但也许这与你把整数转换到计算中的位置有关。

通常,一个时钟显示完整的秒,因此将总时间降为整数。应重新计算每一帧的分钟和秒。除了显示人类可读的totalTime版本之外,它们没有任何用途,因此不需要将它们保存在成员变量中。totalTime应该保持不四舍五入,这样才能保持精确。

代码语言:javascript
复制
//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;

    //...
}

6年后编辑:

为了避免舍入错误,将一组小的浮点增量时间相加,我将存储系统时钟启动时间,并重新计算每一帧所用的时间,如下所示:

代码语言:javascript
复制
// 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;

    //...
}
票数 5
EN

Stack Overflow用户

发布于 2014-09-13 12:36:04

对于我的NoThree游戏,我按如下方式打印计时器:

代码语言:javascript
复制
        gameTime += delta;
        float minutes = (float)Math.floor(gameTime / 60.0f);
        float seconds = gameTime - minutes * 60.0f;
        labelTime.setText(String.format("%.0fm%.0fs", minutes, seconds));

我觉得效果很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25809293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档