我正在使用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。我聽說它有一些圖形問題,但我不知道這是否是原因。