当前,我正在尝试创建一些东西来显示Grid的“ 2D视图”,该视图可用于各种建议,例如简单的2D游戏。
在使用一个简单的Core类进行包装工作之后(这将所有信息保存到我的视觉东西中,包括精灵的像素值),我开始了视觉工作。我的目标是使用Java中的普通摆动/自动执行此操作,因此我为此创建了一个自定义JComponent
。
在我的JComponent
中,我尝试了一些方法,并决定在BufferedImage
中测试绘制像素信息,另一方面直接在Graphics对象中绘制像素。
通过互联网,我发现了一些在屏幕上绘制像素/点的方法,例如this。在这种情况下,我将其包装在一个方法中:
private void drawSpritePixels(ArrayList<Spr.Pixel> pixels, int startX, int startY, Graphics2D g) {
for (Spr.Pixel p : pixels){
g.setColor(p.color);
g.fillRect(p.x + startX, p.y + startY, 1, 1);
}
}
为了将我的数据绘制到BufferedImage
上,我使用了以下方法:
public BufferedImage spriteImage(int spriteAddress) {
BufferedImage img = GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration()
.createCompatibleImage(32, 32, Transparency.TRANSLUCENT);
for (Pixel p : getSpriteInfo(spriteAddresses.get(spriteAddress))) {
img.setRGB(p.x, p.y, p.color.getRGB());
}
return img;
}
正如标题所述,使用BufferedImage
方法的性能更好。我的测试BufferedImage
花费40毫秒才能完成,而Pixel花费200毫秒以上才能完成相同的“工作”。
那么,为什么这是如此不同?我应该避免像素方法出现任何迭代吗?