我正在使用GameBoy模拟器并使用Java2D进行绘制。但是,我现在的绘图方法在我的Linux机器上造成了很多闪烁。我的朋友的Mac上不存在这种闪烁现象。Java2D绘图是闪烁
我应该首先在GameBoy上解释图形。 GameBoy不维护要绘制的像素数据的数组,而是具有呈现的精灵和瓦片数据的列表。内存中还有一个字节,其中包含正在渲染的垂直线的当前x坐标。
因为我需要监视正在绘制的当前x位置,所以我认为绘制所有内容的最佳方式是遍历所有的tile和sprite,将它们渲染到BufferedImage,然后通过这个BufferedImage并在用当前x坐标更新内存中的点时逐个像素地绘制它。
这里是我的代码:
@Override
public void paint(Graphics graphics) {
super.paint(graphics);
Graphics2D g = (Graphics2D) graphics;
BufferedImage secondBuffer = new BufferedImage(160, 144, BufferedImage.TYPE_INT_RGB);
Graphics2D bg = secondBuffer.createGraphics();
display.draw(ram, buffer.createGraphics());
for (int y = 0; y < 144; y++) {
for (int x = 0; x < 160; x++) {
bg.setPaint(new Color(buffer.getRGB(x, y)));
bg.drawLine(x, y, x, y);
ram.getMemory().put(Ram.LY, (byte) x);
}
}
bg.dispose();
g.drawImage(secondBuffer, null, 0, 0);
cpu.setInterrupt(Cpu.VBLANK);
}
我不Java2D的专家,所以可能会有一些我不熟悉的引擎盖下回事。我无法弄清楚为什么这是代码导致闪烁。
编辑:它可能也可能不是相关的,我使用OpenJDK。我听说它有一些图形问题,但我不知道这是否是原因。