【问题标题】:ActiveRendering - Drawing on Buffer not workingActiveRendering - 在缓冲区上绘图不起作用
【发布时间】:2014-09-08 20:38:40
【问题描述】:

我正在创建一个乒乓球游戏。我已经完成了球和桨类、动画师和其他相关的一切。然而,当我打开我创建的程序时,只有 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();
    }

【问题讨论】:

  • 各个绘图方法的作用是什么? (X.vizatodorezen(Graphics),我猜)
  • 球一画了一个椭圆,球的当前位置为 x,y 和 2*radius 的宽度和高度。桨叶在 x,y 处绘制一个具有指定宽度和高度的矩形。
  • @kiheru 但我很惊讶,因为如果我把球放在第一位,那么球拍就不会被画出来......如果我在代码中把球拍放在球之前,只有 1桨被绘制。所以谁先到,谁就被抽中。
  • 我问是因为有两种可能性:例如某些绘图代码是否抛出异常以使其他方法不会被调用,或者某个方法是否更改了图形的坐标(例如通过调用translate()) 使其他对象最终离开屏幕。
  • @kiheru 好的,我在这里添加了桨和球的绘图代码,所以你可以检查一下......

标签: java drawing pong


【解决方案1】:

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

一般来说,调用Graphics.dispose() 的方法与创建它的方法相同。不在接收一个作为参数的方法中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多