0

我正在用 java 创建一个自定义界面屏幕。该界面屏幕的一部分获取给定的图像,然后将其随机分成给定数量的部分,然后通过轻微的移动将它们绘制在屏幕上。在它的顶部绘制了一个覆盖层,它掩盖了下面发生的大部分事情。这显然是非常低效的,因为无法看到正在绘制的大部分内容,并且(我认为)它会导致界面屏幕在第一次启动时短暂停止。我修改了代码,以便仅绘制可以通过覆盖层看到的部分,期望这可以解决启动时减速的问题,但事实并非如此。

当我打印出我的绘制循环的时间时,前三个时间很长:大约 500 毫秒,然后是 300 毫秒,然后是 20 毫秒,其余时间是稳定的 16 毫秒(或 60 fps)。

是否还有其他可能导致开始时速度变慢的原因?java是否有可能在前1000毫秒左右优化我的绘图,以便它可以在其余时间以16毫秒运行?(就像意识到无法看到某些正在绘制的内容,然后进行优化,因此实际上并不是每次更新都绘制它) - 我真的不知道我对可能导致这种情况的原因有些想法。

我已经彻底检查以确保更新开始后没有加载任何对象/线程/资产,这是我唯一能想到的。

非常感谢任何帮助。

4

1 回答 1

0

Java 中的许多循环都是这样的。这是因为 JVM 可以以两种形式存储和运行代码:慢字节码或快速原生代码。字节码是默认设置,因为创建本机代码的成本很高。当程序执行时,JVM 收集有关程序部分的信息,这些信息值得转换为本机代码;这被称为代码的及时编译。因此,当您的程序执行时,它会变得更快。

于 2013-06-15T17:12:20.000 回答