2011-07-29 31 views
1

在使用Slick 2D API的Java中,我构建了一个将位图作为其世界的游戏。如果位图的像素的alpha值为0,则认为该字符可以自由漫游;否则,它是坚实的,他们不能通过。Java平滑2D获得图像像素缓慢,任何优化?

在我的电脑上,我以CPU使用率的1%运行它。然后,当我尝试在我的笔记本电脑上运行它时,它的内核已达到峰值,并在CPU使用率的50%处运行。

经过测试,我发现扩展函数调用获取图像的像素Image.getColor(x, y)。这是有趣的部分。我使用Allegro 5在C++中重建了这个相同的例子,在我的笔记本电脑上,它的运行速度是3%而不是50%。

是否有更有效的方法从光滑2D中的图像获取像素?

回答

1

Image对象转换为像素值数组,并从数组中获取值。过多的方法调用会显着减慢你的程序。

+0

似乎没有简单的函数从图像获取ImageBuffer。我将不得不手动获取像素,并填充我的ImageBuffer,但这样做会使数百个getPixel调用,然后我现在正在做,因为我只有每帧调用3次。我需要这样做,因为在游戏过程中,可以通过绘制来修改世界,然后在已绘制的地形上行走。 – Johnathan

+0

@Johnathan:那么Slick 2D就是llaammee。如果你想操纵Java中的像素,* only *高效的方法是直接操作每个像素为ARGB * int *。其他任何事情都是自杀。在OS X上* getRGB *可以高达**三个数量级**(这是正确的,1 000倍)比直接从后台读取该值* int [] *:在Mac Mini上测量。疯狂:( – SyntaxT3rr0r

+0

)感谢您的信息,我只是会忘记制作这样一个引擎,听起来像是太麻烦了,我仍然想知道他们是如何在跨平台的Wormux中实现的。 – Johnathan