繁体   English   中英

重绘()不重新绘制某个对象/更新形状的xy坐标

[英]Repaint() not repainting a certain object/updating xy coordinates of a shape

从本质上讲,在这个程序中,虫子会在屏幕上移动食物。 我遇到的问题是图形“圆圈”重新绘制得很好并且在框架周围移动,但是没有任何错误被重新绘制(但是它们最初被绘制)。

我用控制台输出测试了它,并且bug的x和y坐标确实更新了,但框架中的图形没有。

所以我的问题是,为什么圈子的x / y被更新和重新绘制,但错误不是?

(据我所知,我正在接近以与圆圈相同的方式更改x / y错误的任务)(我已经删除了一些像世界getter和setter这样的东西,并且删除了代码实际的程序有一个movebug()方法,可以通过命中检测以正确的方式处理错误的移动。)

    public class Run extends JPanel implements ActionListener{

        double x, y, velX, velY, newx, newy;

        public Timer t;
        private static AWorld world1;
        ArrayList<Ellipse2D> graphicBugArrayList = new ArrayList<Ellipse2D>();


        public Run(){
         x = 150;
         y = 150;

         velX = 2;
         velY = 2;

         t      = new Timer(5, this);
         setWorld1(new AWorld());
         getWorld1().populatemap();
         AWorld.direction directionchecker;
         repaint();
         t.start();
        }


        public void paintComponent(Graphics g){

//Creating circle that move
            g.setColor(Color.BLACK);
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            Ellipse2D circle = new Ellipse2D.Double(x, y, 10, 10); 

//creating and drawing the bugs
            for(int i=0; i<world1.getNumberofbugs(); i++)
            {
                Ellipse2D obscircle = new Ellipse2D.Double(getWorld1().bugArrayList.get(i).getHPosition(), getWorld1().bugArrayList.get(i).getVPosition(), 14, 15);
                graphicBugArrayList.add(obscircle);
                g2.setPaint(Color.RED);
                g2.fill(graphicBugArrayList.get(i));
                g2.draw(graphicBugArrayList.get(i));
            }

//Drawing the circle that moves
            g2.setPaint(Color.BLACK);
            g2.draw(circle);

        }

        public void actionPerformed(ActionEvent arg0) {
            //Moving the circle 
            if(x<0 || x > 500)
            {
                velX = -velX;
            }

            if(y<0 || y > 500)
            {
                velY = -velY;
            }
            x += velX;
            y -= velY;

            //Test moving the bugs
    getWorld1().bugArrayList.get(i).setHPosition(getWorld1().bugArrayList.get(i).getHPosition()+1);


            repaint();

        }

    }

你永远不会清除你的graphicBugArrayList ,而只是graphicBugArrayList绘制前几个元素。 在循环中尝试这个:

        for(int i=0; i<world1.getNumberofbugs(); i++)
        {
            Ellipse2D obscircle = new Ellipse2D.Double(getWorld1().bugArrayList.get(i).getHPosition(), getWorld1().bugArrayList.get(i).getVPosition(), 14, 15);
            graphicBugArrayList.add(i, obscircle);
            g2.setPaint(Color.RED);
            g2.fill(graphicBugArrayList.get(i));
            g2.draw(graphicBugArrayList.get(i));
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM