[英]java game loop. a little help to beginner
@Override
public void run() {
while (running) {
currentState.update();
prepareGameImage();
// next line draws image(frame) to the screen
currentState.render(gameImage.getGraphics());
repaint();
}
// End game immediately when running becomes false.
System.exit(0);
}
private void prepareGameImage() {
if (gameImage == null) {
gameImage = createImage(gameWidth, gameHeight);
}
Graphics g = gameImage.getGraphics();
g.clearRect(0, 0, gameWidth, gameHeight);
}
这是游戏循环的一小段。 本书对此作了一些解释。 在prepareGameImage()中,我们通过创建和初始化gameImage变量来准备屏幕外图像,该变量的宽度为gameWidth,高度为gameHeight。 (我不知道它是如何工作的--->)接下来,在每一帧上,我们使用大小相等的矩形清除此图像,以清除上一帧中已绘制到屏幕上的所有图像。 这样可以确保前一帧的图像不会渗入当前帧。 每帧重新开始。
我不明白的是摘要的最后2行。 gameImage.getGraphics();
值gameImage.getGraphics();
获取存储在Graphics变量g
。 方法g.clearRect(0, 0, gameWidth, gameHeight);
应该只影响变量g
,不应该影响gameImage.getGraphics();
生成的值gameImage.getGraphics();
您能解释一下最后两行代码是如何完成任务的吗?“前一帧的图像不会渗入当前帧” :( :(
谢谢
gameImage.getGraphics();
仅将引用(不进行复制)传递给gameImage的内部Graphics。
假设gameImage是某个类A的实例,该类具有类型为Graphics G的私有变量。并且具有用于访问该变量的方法:
public Graphics getGraphics(){
return this.G;
}
如您所料...通过调用getGraphics,您只有图形的引用(指针)。
“图形”元素是程序的全局变量。 它可以管理所有图形 ,无论它们在哪里。 但是由于这是全局性的事情,因此您不能仅使用定义的变量(例如String),而必须从具有引用的现有对象中获取它。 例如,每个图像都有对图形对象的引用。 您拥有的变量g现在是对此元素的引用,可以使用它。 然后,在下一行中使用此参考来清除整个屏幕和先前创建的图像,以使它们不会渗入当前帧 。
(注意:这种解释可能不是100%准确,但这是它首先使我理解它的方式。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.