1

私が取り組んでいるゲームでは、どんどん小さくなる四角形を描く必要があります。次のようなスイングタイマーを使用して、長方形を小さく描画する方法を見つけました。

    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();

私が抱えている問題は、以前に描画された長方形を削除しないため、縮小しているようには見えず、塗りつぶされているように見えることです。小さな長方形が描画された直後に、以前に描画された長方形を削除するにはどうすればよいですか?

4

1 に答える 1

2

あなたはで始めるかもしれません:-

変化する:

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

に:

repaint();

からのGraphicsインスタンスgetGraphics()は一時的なものです。ウィンドウは、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
    }
于 2013-05-04T12:00:38.873 に答える