为什么我的 java 渲染引擎没有更新 window?

why is my java rendering engine not updating the window?

我正在为游戏制作渲染器,一切正常,但 jpanel 不会更新,有时会出现乱序。

示例:

这是渲染框架的代码:

static Container c;
static JFrame f;
static ArrayList<renderable_object> objs = new ArrayList<>();

public void main () {
    Image iconI = Toolkit.getDefaultToolkit().getImage(icon);  

    f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    f.getContentPane().add(new canvas());
    c = f.getContentPane();
}

class canvas extends JComponent {
    public void paint(Graphics g)
    {
        Dimension size = getSize();
        g.drawRect(0, 0, size.width, size.height);

        for (renderable_object part : objs) {       
            g.setColor(part.c);
            if (part.type == 1) {
                g.drawLine(part.i,part.j,part.k,part.l);
            } else if (part.type == 2) {
                g.drawOval(part.i,part.j,part.k,part.l);
            } else if (part.type == 3) {
                g.drawRect(part.i,part.j,part.k,part.l);
            } else if (part.type == 4) {
                g.drawString(part.name,part.k,part.l);
            }
        }

        objs.clear();
    }
}

class renderable_object {
    int i = 0;
    int j = 0;
    int k = 0;
    int l = 0;

    int type = 0;

    String name = "";

    Color c = new Color(0,0,0);
}

}

arraylist 确保渲染器正确排序对象。

感谢帮助。

我看到的第一个问题是您没有在自定义 paint 方法中首先调用 super.paint(g);。 使用 JComponent 时,您可以使用它内置的双缓冲功能。但是,此功能不适用于 paint 方法,但适用于 paintComponent 方法,因此您应该将当前的解决方案替换为这样的解决方案:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    // your drawing code here
}

并且在主要更新中:

f.repaint();