在互联网上寻找主游戏循环引擎的图形方法后,我发现了下面的代码,但对其工作原理知之甚少。
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) 设置图像变量,然后设置图像中的像素数组。如果不直接改变image变量,那么如何通过pixels数组改变image的值而不需要在改变pixels数组后设置它呢?
非常感谢。
最佳答案
您处理图形上下文,之前所做的任何更改都不会受此影响,因为
Graphics
不是保存实际像素数据的对象。pixels
数组是对BufferedImage
栅格的直接引用。它们是同一件事,因此不需要执行任何魔法将像素“刷新”回图像。
关于java - 为什么这个 BufferImage 渲染方法有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296298/