私はプロジェクトに取り組んでおり、Java でのダブル バッファリングについてできる限り読んでいます。私がしたいのは、描画するダブルバッファリングされたサーフェスを含む JFrame にコンポーネントまたはパネルまたは何かを追加することです。可能であればハードウェア アクセラレーションを使用し、それ以外の場合は通常のソフトウェア レンダラーを使用します。私のコードはこれまでのところ次のようになります。
public class JFrameGame extends Game {
protected final JFrame frame;
protected final GamePanel panel;
protected Graphics2D g2;
public class GamePanel extends JPanel {
public GamePanel() {
super(true);
}
@Override
public void paintComponent(Graphics g) {
g2 = (Graphics2D)g;
g2.clearRect(0, 0, getWidth(), getHeight());
}
}
public JFrameGame() {
super();
gameLoop = new FixedGameLoop();
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new GamePanel();
panel.setIgnoreRepaint(true);
frame.add(panel);
panel.setVisible(true);
frame.setVisible(true);
}
@Override
protected void Draw() {
panel.repaint(); // aquire the graphics - can I acquire the graphics another way?
super.Draw(); // draw components
// draw stuff here
// is the buffer automatically swapped?
}
@Override
public void run() {
super.run();
}
}
抽象的なゲーム クラスと、Update と Draw を呼び出すゲーム ループを作成しました。さて、私のコメントを見ると、それが私の主な懸念事項です。再描画と paintComponent を実行してから、再描画のたびに変数を割り当てる代わりに、グラフィックを一度取得する方法はありますか? また、このハードウェアはデフォルトで高速化されていますか? そうでない場合、ハードウェアアクセラレーションを行うにはどうすればよいですか?