我想绘制到一个后台缓冲区,然后显示在 JPanel 上,但我无法应用我的绘图,它只会显示为完全黑屏。
有什么想法吗?
我当前的代码:
public class Game extends JPanel {
int screenWidth = 1280;
int screenHeight = 720;
BufferedImage backbuffer;
Graphics2D g2d;
AffineTransform at = new AffineTransform();
Polys polygon = new Polys();
public void init() {
backbuffer = new BufferedImage(screenWidth, screenHeight, BufferedImage.TYPE_INT_RGB);
g2d = backbuffer.createGraphics();
}
public void update(Graphics g) {
g2d.setColor(Color.PINK);
g2d.fillRect(0, 0, screenWidth, screenHeight);
drawStuff();
paint(g);
}
public void drawStuff() {
g2d.setTransform(at);
g2d.translate(10, 10);
g2d.setColor(Color.BLACK);
g2d.drawPolygon(polygon.getPoly());
}
public void paint(Graphics g) {
g.drawImage(backbuffer, 0, 0, this);
}
Game() {
setPreferredSize(new Dimension(screenWidth, screenHeight));
init();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Game Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.getContentPane().add(new Game());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
由于某种原因,让它与画布一起使用,但不能与 JPanel(与 paintComponent)一起使用。 update() 也许不会被 paintComponent 调用?
不要重写 update() 方法。这是旧的AWT代码,不是在Swing中完成的。绘制到缓冲图像可以在创建缓冲图像时在构造函数中完成。但一般来说,只有当您的图像是静态的时,您才会使用缓冲图像。
在您的情况下,我建议您不需要缓冲图像。只需在paintComponent(...)
方法中执行所有自定义绘制即可。