我正在开发一个项目,已经尽可能多地阅读了有关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。现在,如果您看到我的注释,那就是我主要关注的地方。有没有一种方法可以一次获取图形,而不是通过repaint和paintComponent进行每次重绘然后再分配变量?此外,默认情况下是否启用硬件加速?如果没有,我应该怎么做才能让它启用硬件加速?