ActiveRendering - 在缓冲区上绘图不起作用

时间:2014-09-08 12:11:59

标签: java drawing pong

我正在制作乒乓球比赛。我已经完成了球和桨类,动画师和其他一切相关的工作。但是当我打开我创建的程序时,只有1个球拍显示,而另一个球拍和球没有显示。如果我改变画画的方式,球会显示,而其他2个拨片也不会。因此,无论先到底是什么,它只会吸引一件事。这是绘制缓冲区的部分代码。

public void renderlojen(){ // render game function
        if(pamja==null){
            pamja=createImage(GJERESIA,LARTESIA); // Image - serves as buffer

        }

        g =(Graphics2D) pamja.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, GJERESIA, LARTESIA);

        doreza1.vizatodorezen(g); // paddle1
        doreza2.vizatodorezen(g); // paddle2
        topi1.vizatotopin(g); // ball

        g.dispose();
    }

public void updatolojen(){  // update game function
        topi1.leviztopin();
        doreza1.levizdorezen();
        doreza2.levizdorezen();
    }

public void pikturolojen(){ // draw from buffer to screen
        if (pamja!=null){
            g=(Graphics2D)this.getGraphics();
            g.drawImage(pamja, 0, 0, null);
            Toolkit.getDefaultToolkit().sync();
            g.dispose();
            System.out.println(doreza1.merrX());
            System.out.println(doreza2.merrX());
        }
        else
            System.out.println("Ska pamje");

    }

public void vizatotopin(Graphics2D g2d){ // draw the ball code
        topiforma =new Ellipse2D.Float(pozicioniX,pozicioniY,2*rrezja,2*rrezja);
        g2d.setColor(Color.CYAN);
        g2d.fill(topiforma);
        g2d.dispose();
    }

public void vizatodorezen (Graphics2D g2d){ // draw paddle code
        drejtkendeshforma = new Rectangle2D.Float(pozicioniX,pozicioniY,GJERESIA,LARTESIA);
        g2d.setColor(ngjyra);
        g2d.fill(drejtkendeshforma);
        g2d.dispose();
    }

1 个答案:

答案 0 :(得分:1)

问题是在游戏对象的渲染方法中调用Graphics.dispose()。在此之后绘制到Graphics无效,因此只绘制第一个对象。

通常,只能在创建它的同一方法中调用Graphics.dispose()。不是在接收一个作为参数的方法中。