在 Java 中绘制到后台缓冲区时出现问题



我想绘制到一个后台缓冲区,然后显示在 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(...)方法中执行所有自定义绘制即可。

相关内容

  • 没有找到相关文章

最新更新