Java 在画布上绘制图像时的黑色图像
我正在制作一个游戏,在这个游戏中,我使用画布来显示我的图形。我没有(也不打算)使用任何Swing组件 在我的渲染方法中: 我使用的是从画布上获得的缓冲策略Java 在画布上绘制图像时的黑色图像,java,canvas,graphics,graphics2d,Java,Canvas,Graphics,Graphics2d,我正在制作一个游戏,在这个游戏中,我使用画布来显示我的图形。我没有(也不打算)使用任何Swing组件 在我的渲染方法中: 我使用的是从画布上获得的缓冲策略 BufferStrategy bs = this.getBufferStrategy(); if(bs == null){ createBufferStrategy(3); return; } Graphics g = bs.getDrawGraphics(); 随后,我用同样的方法绘
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();
当我//结束渲染并完成g的绘制时,我会问游戏是否暂停。如果是这样的话,我将根据g。我渲染BuffereImage,然后在上面渲染我的清单屏幕:
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);
我的参考图像中有一个黑色缓冲区图像。
我使用缓冲策略是否做错了什么?我是否应该使用两个不同的图形对象
这是一张我暂停游戏以获得想法前后的图片。
而不是:
g.drawImage(img, 0, 0, Color.CYAN, this);
我把它改成:
g.drawImage(img, 20, 20, Color.CYAN, this);
只是一些任意的x,y,这样你就可以了解它们的分层情况
不要介意那个灰色的盒子。这是一个fillRect(),我最终会将它扩展为清单屏幕中图形的一部分
为什么会出现黑色图像?绘制是一个破坏性的过程,每次都需要完全重新绘制当前状态,它不会累积以前周期中的绘制。在处理
缓冲策略时,这一点非常重要,因为以前的缓冲区可能是脏的。我不知道为什么要渲染到缓冲区图像
,这有点违背了使用缓冲区策略的目的。请考虑提供一个演示您的问题的示例。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将导致更少的混乱和更好的响应。我想要img,因为我在它上面运行高斯模糊,以获得游戏的暂停效果。谢谢你的输入。哦,好吧,这可能是问题所在,你有没有试过在没有它的情况下渲染输出?是的,我有。我的高斯模糊技术是正确的。我已经创建了一个完全独立的程序来演示我用来模糊的算法。我还没有在游戏的源代码中实现模糊。我仍在尝试获得正确的img,以便进行模糊。绘画是一个破坏性的过程,每次你都要完全重新绘制当前状态,它不会积累以前周期中的绘画。在处理缓冲策略时,这一点非常重要,因为以前的缓冲区可能是脏的。我不知道为什么要渲染到缓冲区图像
,这有点违背了使用缓冲区策略的目的。请考虑提供一个演示您的问题的示例。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将导致更少的混乱和更好的响应。我想要img,因为我在它上面运行高斯模糊,以获得游戏的暂停效果。谢谢你的输入。哦,好吧,这可能是问题所在,你有没有试过在没有它的情况下渲染输出?是的,我有。我的高斯模糊技术是正确的。我已经创建了一个完全独立的程序来演示我用来模糊的算法。我还没有在游戏的源代码中实现模糊。我仍在尝试获得正确的img,以便能够模糊。