提问者:小点点

绘制后处理Graphics2D绘制


对于我正在制作的游戏,我需要绘制一个越来越小的矩形。我已经想出了如何使用像这样的摇摆定时器来绘制更小的矩形:

    timer = new Timer(100, new ActionListener(){
        public void actionPerformed(ActionEvent e){
            Graphics2D g2d = (Graphics2D) panel.getGraphics();
            if(width > 64){
                g2d.drawRect(x,y,width,height);
                x += 1;
                y += 1;
                width -= 1;
                height -= 1;
            }
        }
    });
    timer.start();

我遇到的问题是,它不会删除之前绘制的矩形,所以它看起来不会缩小,而是更像是在填充。那么,如何在绘制较小的矩形后立即删除先前绘制的矩形呢?


共1个答案

匿名用户

你可以从以下开始:-

改变:

Graphics2D g2d = (Graphics2D) panel.getGraphics(); 

到:

repaint();

getGraphics()中的Graphics实例是瞬态的,当JVM认为有必要时,可能会重新绘制窗口。

重写的方法可能如下所示。

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);  // Effectively clears the BG
        Graphics2D g2d = (Graphics2D)g;
        if(width > 64){
            g2d.drawRect(x,y,width,height);
            x += 1;
            y += 1;
            width -= 1;
            height -= 1;
        }
        // Toolkit.getDefaultToolkit().sync(); 
        // g2d.dispose();  NO!  Don't dispose of this graphics instance
    }