私はGameBoyエミュレータとJava2Dを描画に使用しています。しかし、私の現在の描画方法は、私のLinuxマシン上で多くのちらつきを引き起こしています。このちらつきは私の友人のMacにはない。Java2D描画が点滅しています
ゲームボーイのグラフィックを最初に説明する必要があります。 GameBoyは、描画されるピクセルデータの配列を維持するのではなく、レンダリングされるスプライトおよびタイルデータのリストを保持します。また、レンダリングされている垂直線の現在のx座標を含む1バイトのメモリがあります。
描画対象の現在のx位置を監視する必要があるため、すべてを描画する最良の方法は、すべてのタイルとスプライトをループしてBufferedImageにレンダリングしてから、このBufferedImageメモリ内のスポットを現在のx座標で更新しながらピクセル単位でプロットします。私は2Dで持つ専門家ではないよ
@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);
}
、私は精通していないですボンネットの下で起こって何かがあるかもしれません:
は、ここに私のコードです。なぜこのコードがちらつきを引き起こしているのか分かりません。
編集:私はOpenJDKを使用しているかどうかは関係ありません。グラフィカルな問題があると聞いていますが、それが原因かどうかはわかりません。