我有一个使用Java制作的LWJGL和Slick2D的游戏。我最近添加了这段代码来获取像素是否为空:
for (Entity e : onscreenents)
if (e.getBlockID() == 1 || e.getBlockID() == -2)
for (int x = e.getX(); x < e.getX() + 18; x++)
for (int y = e.getY(); y < e.getY() + 18; y++)
if (x > 0 && y > 0 && x < empty.length && y < empty[x].length)
empty[x][y] = false;
这个代码似乎在Eclipse的Run模式下运行良好,但是当我在Eclipse的Debug模式下启动程序时,游戏运行得非常慢并且非常小问题。删除此代码块使调试模式像运行模式一样平稳运行。
有谁知道为什么会发生这种情况,是否是我的错?这真的有帮助:)
答案 0 :(得分:1)
这些可能有所帮助:
Speeding up Tomcat in debug mode with Eclipse IDE
Why does Java code slow down in debugger?
Why does the debugged program slow down so much when using method entry debugging?
如果您确实需要性能改进,那么bmargulies评论是有效的。尝试将不变量移出循环,这样它们只计算一次。
所以将e.getX()
和e.getY()
调用移到for循环之上,这样它们只被调用一次并将它们保存在本地变量中。与empty.length
相同(如果这些不随每次循环迭代而改变)。
甚至可能将empty[x]
保存到局部变量中,因为数组项解除引用比局部变量访问慢。
您还对x>0
和y>0
进行了测试。如果您只对+ ve值感兴趣,那么您可以测试e.getX()+18
和e.getY()+18
以查看它们在循环之前是否为+ ve,因为您甚至可能不必执行它们。 (例如,如果e.getX()+18<=0
您不必执行x
循环。y
相同
谨防过早优化。