Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android游戏,仅显示游戏UI HUD中花费的时间的两位小数(仅数百秒)_Java_Android_Game Development_Time Format - Fatal编程技术网

Java Android游戏,仅显示游戏UI HUD中花费的时间的两位小数(仅数百秒)

Java Android游戏,仅显示游戏UI HUD中花费的时间的两位小数(仅数百秒),java,android,game-development,time-format,Java,Android,Game Development,Time Format,我正在编写一个简单的Android游戏,我希望我的游戏UI HUD只显示花费的时间、经过的时间和类似的时间的两位小数(即仅数百秒)。我的代码示例如下: canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 10, 20, paint); formatTime以毫秒为单位返回时间。(即54.335秒)。这对我的需要没用。我尝试了DecimalFormat,正如之前在其他问题中所建议的那样,但没有成功。我怀疑问题出在canvas

我正在编写一个简单的Android游戏,我希望我的游戏UI HUD只显示花费的时间、经过的时间和类似的时间的两位小数(即仅数百秒)。我的代码示例如下:

canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 10, 20, paint);
formatTime以毫秒为单位返回时间。(即54.335秒)。这对我的需要没用。我尝试了DecimalFormat,正如之前在其他问题中所建议的那样,但没有成功。我怀疑问题出在canvas.drawText而不是System.out.println()


非常感谢您的帮助

我想提出两种不同的方法来实现您的目标:

1。drawText()

查看它的文档,似乎有一个方法,它还接受要绘制的字符串的第一个和最后一个索引

drawText(字符序列文本、整数开始、整数结束、浮点x、浮点y、绘制)

绘制由开始/结束指定的指定范围的文本及其 指定油漆中(x,y)处的原点

我建议将您的代码更改为:

canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 0, 7, 10, 20, paint);
起点:0, 结束:7(因为“54.33 S”也包括圆点)

一个可能的问题是秒数是否小于10或大于100(这会影响字符串的长度,从而影响结束索引)

  • 如果“formatTime()”方法返回字符串,则可以获取“.”的索引并添加2以添加毫秒
  • 如果“formatTime()”方法返回四舍五入的双精度,则必须将双精度转换为字符串并应用步骤1
  • drawText()调用现在如下所示:

    String time = formatTime(fastestTime);
    int endIndex = time.indexOf('.') + 5;
    canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 0, endIndex, 10, 20, paint);  
    
    2。裁剪字符串

    如果我的第一个解决方案不起作用(我没有尝试过),您可以简单地将字符串裁剪到毫秒,然后绘制整个字符串

    我假设格式化时间返回一个字符串(如果没有,则将其转换为字符串并继续)


    我想提出两种不同的方法来实现您的目标:

    1。drawText()

    查看它的文档,似乎有一个方法,它还接受要绘制的字符串的第一个和最后一个索引

    drawText(字符序列文本、整数开始、整数结束、浮点x、浮点y、绘制)

    绘制由开始/结束指定的指定范围的文本及其 指定油漆中(x,y)处的原点

    我建议将您的代码更改为:

    canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 0, 7, 10, 20, paint);
    
    起点:0, 结束:7(因为“54.33 S”也包括圆点)

    一个可能的问题是秒数是否小于10或大于100(这会影响字符串的长度,从而影响结束索引)

  • 如果“formatTime()”方法返回字符串,则可以获取“.”的索引并添加2以添加毫秒
  • 如果“formatTime()”方法返回四舍五入的双精度,则必须将双精度转换为字符串并应用步骤1
  • drawText()调用现在如下所示:

    String time = formatTime(fastestTime);
    int endIndex = time.indexOf('.') + 5;
    canvas.drawText("Fastest: " + formatTime(fastestTime) + " S", 0, endIndex, 10, 20, paint);  
    
    2。裁剪字符串

    如果我的第一个解决方案不起作用(我没有尝试过),您可以简单地将字符串裁剪到毫秒,然后绘制整个字符串

    我假设格式化时间返回一个字符串(如果没有,则将其转换为字符串并继续)


    formatTime
    函数做什么?我想您实际上需要的是一个适当的
    SimpleDateFormat
    ,而不是
    DecimalFormat
    formatTime
    函数做什么?我想你需要的其实是一个适当的
    SimpleDateFormat
    ,而不是
    DecimalFormat
    。首先,谢谢。然后,我尝试了一下,它与第二个建议完美结合。第一个建议去掉了“S”。我改变了建议1。要添加5的偏移量-毫秒+S。很好,我使用建议2,因为它工作得很好。首先,谢谢。然后,我尝试了一下,它与第二个建议完美结合。第一个建议去掉了“S”。我改变了建议1。为了增加5毫秒+S的偏移量,我使用建议2,因为它工作得很好。