在浏览互联网寻找主游戏循环引擎的图形方法之后,我遇到了下面的代码,并且对它的工作原理一无所知。
public class Game extends Canvas {
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer().getDataBuffer()).getData();
private void tick() {
for (int i = 0; i < pixels.length; i++) {
pixels[i] = i;
}
}
private void render() {
BufferStrategy bs = getBufferStrategy();
Graphics g = bs.getDrawGraphics();
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
g.dispose();
bs.show();
}
}
我对这段代码有两点不明白的地方:
1)在render方法中,将g设置为bs.getDrawGraphics(),然后使用图形,并处理图形对象。如果你没有改变bs,而不是从bs设置g,那么不应该用g销毁图像吗?
2)设置图像变量,然后设置图像中的像素数组。如果你没有直接改变图像变量,那么在更改像素阵列后如何在不设置像素数组的情况下更改图像的值?
非常感谢。
答案 0 :(得分:1)
您处置图形上下文,之前所做的任何更改都不受此影响,因为Graphics
不是保存实际像素数据的对象。
pixels
数组是对BufferedImage
栅格的直接引用。它们是相同的,所以没有必要做任何魔术来将像素“冲洗”回图像。