你遇到的问题是你已经拆分了你的绘画方法, 如果你制作一个专门用于绘画的课程,并且你将所有的油漆放在一个绘画方法中,那么它应该可以在没有闪烁的情况下工作。
我还建议您考虑在计时器上运行您的绘画调用,让您决定刷新率,这通常会带来更顺畅的体验。
这是我最新游戏中的图形类示例,
class GameGraphics extends JPanel implements ActionListener { private Timer refreshHZTimer; private int refreshHZ = 10; private int frameID = 0; public GameGraphics(int width, int height) { setBounds(0,0, width, height); setVisible(true); refreshHZTimer = new Timer(refreshHZ, this); refreshHZTimer.start(); } @Override public void actionPerformed(ActionEvent e) { frameID++; if (frameID % 100 == 1) System.out.println("Painting FrameID: " + frameID); repaint(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); //Init graphics Graphics2D g2 = (Graphics2D) g; //Paint stuff here: } }
并将此代码添加到您的JFrame构造函数:
GameGraphics gpu = new GameGraphics(width, height); frame.add(gpu);