【发布时间】: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 好的,我在这里添加了桨和球的绘图代码,所以你可以检查一下......