有没有正确的方法在java中使用java sdk和libGDX中的库创建和显示计时器?
我希望我的计时器从零开始,并以分钟:秒的格式显示。
我目前正在使用变通方法,例如在渲染方法中添加增量时间,并将totalTime / 60
转换为整数分钟和totalTime - minutes * 60
秒。
在此之前,我尝试将delta添加到秒并在render方法中使用if将秒设置为0,并在秒> = 59.9f时将分钟增加1。这两种方法效率都很低,而且不够准确。我的计时器在接近一分钟结束时跳过几秒钟,或者显示60秒,然后增加分钟并重置秒数,如1:59,1:60和2:00。
我搜索了整个文档和互联网,但没有找到正确显示时间的方法(不是具有巨大缺陷的解决方法)。你怎么能以专业的方式做到这一点?
我认为AAA游戏并不认真对待这些东西......有没有人甚至认为人们可能需要像java或libGDX中的倒数计时器那样的东西(至少在不显示1:60的情况下工作)?
答案 0 :(得分:4)
很难准确地遵循您的尝试,因此我不确定您在哪里丢失准确性,但可能与您在计算中放置整数投射的位置有关。< / p>
通常,时钟显示完整的秒数,因此将总时间舍入为整数。每帧应重新计算分钟和秒。除了显示人类可读的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;
//...
}
答案 1 :(得分:0)
对于我的NoThree游戏,我按如下方式打印计时器:
gameTime += delta;
float minutes = (float)Math.floor(gameTime / 60.0f);
float seconds = gameTime - minutes * 60.0f;
labelTime.setText(String.format("%.0fm%.0fs", minutes, seconds));
我觉得它很好用。