【发布时间】:2018-12-22 16:43:41
【问题描述】:
我想制作一个类似于 Minecraft 的开放世界 2D 游戏,并将世界加载到块(就像 MC)中,大小为 16x16 块(总共 256 个块)。但是我通过迭代 256 次发现,用这样的代码完全迭代需要将近 20ms:
long time = System.nanoTime();
for(int i = 0; i < 16*16; i++)
{
System.out.println(i);
}
System.out.println(System.nanoTime() - time);
因为我不仅要打印数字,还要获取一个块,获取它的纹理并将该纹理绘制到框架上,我担心迭代可能需要更长的时间。也许我只是夸大了一点,但有没有办法更快地迭代?
【问题讨论】:
-
除非你转向多线程
-
如果你真的想访问所有这 256 个区块,你肯定需要访问所有这些区块。唯一可能提高遍历速度的是在并行线程中访问它们。但这听起来不像你的用例。
-
我不太确定迭代的原因,但是如果您正在搜索某些东西并且您知道坐标,也许可以查看不同类型的搜索,不是线性的,因为这不是最高效,即 0 一直到 255 不是很有效,将其拆分可能更有效。如果它只是初始加载,那么您可以在用户看到它之前完成所有操作,然后显示它。如果是用于操作特定坐标,那么多维数组可能会适合。如果您必须参考 0-255 的坐标,那么您将能够操纵这个参考
-
print不是一个快速操作,那么当您的 real 代码根本不会进行任何打印时,为什么要对 256 个值的打印进行性能测试。这就像说您认为哈雷车很慢,因为您在踏板车上进行了试驾。这是一个毫无意义的测试。扔掉那个代码,做你真正想做的事,然后分析那个代码,如果你确实有它的性能问题。