如何在没有repaint()的情况下在java中制作2d图形?

时间:2015-04-01 18:53:49

标签: java graphics 2d-games

我想在不同的时间集中绘制一些矩形,当我用paint()绘制第一个矩形时,我使用paint()绘制第二个矩形,然后第一个矩形消失。我发现一个图像覆盖了一个普遍的图像。如何不重新创建以前的(不使用repaint())?我很欣赏每一个答案:d

public static class Screen extends Frame 
    {

        int WIDTH = 900;
        static int[][] map = new int[700][700];
        public Screen() 
        {
            super("Clash of Tank");
            setSize(WIDTH, WIDTH);
            addWindowListener(new WindowAdapter() 
            {
                public void windowClosing(WindowEvent e) 
                {
                    System.exit(0);
                }
            });
        }


        public void paint(Graphics g) {
            BufferedImage image = (BufferedImage) createImage(700,700);
            Graphics g2 = image.getGraphics();
            drawTank(g2);
            g.drawImage(image, 325, 35, this);
        }


        void drawTank(Graphics g) {

            g.setColor(Color.BLACK);
            for(int i = 0; i<=690; i+=1)
                for(int j = 0; j<=690; j+=1)
                    {
                        if(map[i][j]==0)
                            g.setColor(Color.BLACK);
                        if((map[i][j]==1))
                            g.setColor(Color.BLUE);
                        if((map[i][j]==2))
                            g.setColor(Color.RED);
                        if((map[i][j]==3))
                            g.setColor(Color.GREEN);
                        if((map[i][j]==4))
                            g.setColor(Color.YELLOW);
                        g.fillRect(i, j, 1, 1);
                    }



        }

    }


public class ClashofTanks 
{
    public static void main(String[] args) throws Exception 
    {
        Screen t = new Screen(); 
        t.setVisible(true);
        t.repaint();
    }
}   

1 个答案:

答案 0 :(得分:0)

你的是一个经典的XY Problem,你要求一个特定的解决方案来解决一个错误的做事方式。

关键是你应该使用repaint(),但是你应该存储一组矩形并在paint或{{{for}循环中绘制它们1}}方法(如果使用Swing),或者将它们绘制到BufferedImage并在绘制方法中绘制 。不要忘记也调用super paint或paintComponent方法。