是否有适当的方法在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 )?
发布于 2014-09-12 14:27:26
很难准确地理解你尝试过的内容,所以我不知道你在哪里失去了准确性,但也许这与你把整数转换到计算中的位置有关。
通常,一个时钟显示完整的秒,因此将总时间降为整数。应重新计算每一帧的分钟和秒。除了显示人类可读的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;
//...
}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;
//...
}发布于 2014-09-13 12:36:04
对于我的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));我觉得效果很好。
https://stackoverflow.com/questions/25809293
复制相似问题