我正在开发一款游戏,我使用Canvas来显示我的图形。我没有(也没有计划)使用任何Swing组件...
在我的渲染方法中:
我正在使用从画布中获取的BufferStrategy。
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
稍后在同一方法中,我最终绘制图像(实体,树木,地图等),处理g,并显示引用'bs'。
...drawings onto canvas(entities, trees, map, etc.)
//END RENDER
g.dispose();
bs.show();
在我// END RENDER和完成绘画之间,我会问是否暂停游戏。如果是这样的话,我将根据g创建一个BufferedImage。我渲染了BufferedImage然后渲染我的库存屏幕:
BufferedImage img = new BufferedImage(this.width, this.height, BufferedImage.TYPE_3BYTE_BGR);
Graphics gx = img.getGraphics();
game.paint(gx);
g.drawImage(img, 0, 0, Color.CYAN, this);
interfaceLayer.render(g);
我在我的参考img中得到了一个黑色的BufferedImage。 我使用BufferStrategy做错了吗?我不应该使用两个不同的Graphics对象吗?
这是我暂停游戏以获得想法之前和之后的图片。 而不是:
g.drawImage(img, 0, 0, Color.CYAN, this);
我把它改为:
g.drawImage(img, 20, 20, Color.CYAN, this);
只需要一些任意的x,y,这样你就可以了解他们分层的情况。
别介意灰盒子。这是一个fillRect(),我最终将作为库存屏幕中图形的一部分进行扩展。
为什么是黑色图像?