Java 在画布上绘制图像时的黑色图像

Java 在画布上绘制图像时的黑色图像,java,canvas,graphics,graphics2d,Java,Canvas,Graphics,Graphics2d,我正在制作一个游戏,在这个游戏中,我使用画布来显示我的图形。我没有(也不打算)使用任何Swing组件 在我的渲染方法中: 我使用的是从画布上获得的缓冲策略 BufferStrategy bs = this.getBufferStrategy(); if(bs == null){ createBufferStrategy(3); return; } Graphics g = bs.getDrawGraphics(); 随后,我用同样的方法绘

我正在制作一个游戏,在这个游戏中,我使用画布来显示我的图形。我没有(也不打算)使用任何Swing组件

在我的渲染方法中:

我使用的是从画布上获得的缓冲策略

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,以便能够模糊。