在游戏中,我想在JComponent
中同时显示两个JFrame
个实例。一个是背景板,另一个是玩家角色。
因此,一个组件(背景)将落后于另一个组件(一个角色)。该角色将绘制几个矩形,因此它通常会有一些完全透明的区域。
怎么做?我知道通常,当我向框架添加两个组件(方法add(Component)
)时,只有最后添加的组件可见。这可以通过以下代码完成:
frame.add(backg); // backg is an instance of a certain class that derives from JComponent
// (...)
frame.add(psc); // psc is an instance of an another class that derives from JComponent
frame.pack();
frame.setVisible(true);
我应该如何更改上面的代码?
答案 0 :(得分:1)
首先,如果你想用Java编写游戏,试试Slick2D提供了许多工具和更好的图形功能(围绕着围绕OpenGL的LWJGL)。其次,如果您决定采用Swing路线,这是一个简单的解决方案:
//Player + background components defined here
playerComp.setOpaque(false);
JLayeredPane layer = new JLayeredPane();
layer.add(backgroundComp,1,0);
layer.add(playerComp,2,0);
我认为上述评论中都提到了这两种解决方案。将播放器组件opaquity设置为false允许这些透明区域显示播放器后面的组件或背景图像。如果您熟悉CSS / HTML中的z-index,JLayeredPane基本上可以为Swing添加z-index,允许您设置组件的呈现顺序。因此,将播放器设置为不透明,然后在背景组件前面渲染它。