Java游戏中背景图像未显示在JLabel/JFrame中

Java游戏中背景图像未显示在JLabel/JFrame中,java,swing,Java,Swing,我正在制作一个java游戏,它的核心是一个JFrame,其中包含一个JLabel,用于保存背景图像。在项目的早期,这是被展示的。然而,在我实现了一个游戏渲染方法,将healthbars和一个角色放在屏幕上之后,背景图像就不再显示了。下面是游戏的render()和main()方法 如果我先放置player.render(g),那么player和health栏都会出现在屏幕上。但是,如果我将healthBars.render(g)放在player.render(g)之前,则该播放器不会出现。这真的让

我正在制作一个java游戏,它的核心是一个JFrame,其中包含一个JLabel,用于保存背景图像。在项目的早期,这是被展示的。然而,在我实现了一个游戏渲染方法,将healthbars和一个角色放在屏幕上之后,背景图像就不再显示了。下面是游戏的render()和main()方法

如果我先放置player.render(g),那么player和health栏都会出现在屏幕上。但是,如果我将healthBars.render(g)放在player.render(g)之前,则该播放器不会出现。这真的让我很困惑,因为我希望呈现第二个的会导致第一个隐藏在后面,但情况正好相反。有人能给我指出正确的方向吗?

  • BufferStrategy
    Swing
    不配合,因为您控制了绘制过程
  • Canvas
    不能是透明的,因此它将隐藏其下方的任何内容
  • 当您使用
    frame.add(游戏)
    时,您正在替换曾经位于
    BorderLayout.CENTER的内容
不要混合使用轻量级(Swing)和重量级(AWT)组件,而是在
渲染过程中绘制背景图像

public void render() {

    BufferStrategy bs = this.getBufferStrategy();
    if(bs == null)
    {
        createBufferStrategy(3); //Use 5 at most
        return;
    }
    Graphics g = bs.getDrawGraphics();

    //RENDER HERE
    // Paint background here...
    player.render(g);
    healthBars.render(g);



    //END RENDER
    g.dispose();
    bs.show();
}
  • BufferStrategy
    Swing
    不配合,因为您控制了绘制过程
  • Canvas
    不能是透明的,因此它将隐藏其下方的任何内容
  • 当您使用
    frame.add(游戏)
    时,您正在替换曾经位于
    BorderLayout.CENTER的内容
不要混合使用轻量级(Swing)和重量级(AWT)组件,而是在
渲染过程中绘制背景图像

public void render() {

    BufferStrategy bs = this.getBufferStrategy();
    if(bs == null)
    {
        createBufferStrategy(3); //Use 5 at most
        return;
    }
    Graphics g = bs.getDrawGraphics();

    //RENDER HERE
    // Paint background here...
    player.render(g);
    healthBars.render(g);



    //END RENDER
    g.dispose();
    bs.show();
}
  • BufferStrategy
    Swing
    不配合,因为您控制了绘制过程
  • Canvas
    不能是透明的,因此它将隐藏其下方的任何内容
  • 当您使用
    frame.add(游戏)
    时,您正在替换曾经位于
    BorderLayout.CENTER的内容
不要混合使用轻量级(Swing)和重量级(AWT)组件,而是在
渲染过程中绘制背景图像

public void render() {

    BufferStrategy bs = this.getBufferStrategy();
    if(bs == null)
    {
        createBufferStrategy(3); //Use 5 at most
        return;
    }
    Graphics g = bs.getDrawGraphics();

    //RENDER HERE
    // Paint background here...
    player.render(g);
    healthBars.render(g);



    //END RENDER
    g.dispose();
    bs.show();
}
  • BufferStrategy
    Swing
    不配合,因为您控制了绘制过程
  • Canvas
    不能是透明的,因此它将隐藏其下方的任何内容
  • 当您使用
    frame.add(游戏)
    时,您正在替换曾经位于
    BorderLayout.CENTER的内容
不要混合使用轻量级(Swing)和重量级(AWT)组件,而是在
渲染过程中绘制背景图像

public void render() {

    BufferStrategy bs = this.getBufferStrategy();
    if(bs == null)
    {
        createBufferStrategy(3); //Use 5 at most
        return;
    }
    Graphics g = bs.getDrawGraphics();

    //RENDER HERE
    // Paint background here...
    player.render(g);
    healthBars.render(g);



    //END RENDER
    g.dispose();
    bs.show();
}

有道理。我会试着在半小时内把它修好,然后让你知道它是怎么回事。我会试着在半小时内把它修好,然后让你知道它是怎么回事。我会试着在半小时内把它修好,然后让你知道它是怎么回事。我会试着在半小时内把它修好,然后告诉你情况如何。