我正在制作一款2D游戏,现在我被困在一个绘图问题上了。我每帧都用背景图像和字符重新绘制JPanel,但GUI是在设置功能中创建的。我认为这导致JButton出现在背景图像后面,值得一提的是这个类扩展了JPanel。我使用setBounds以特殊方式排列GUI元素。这个问题的可能解决方案是什么?
/** Draw game to the screen **/
private void gameDraw() {
Graphics g2 = this.getGraphics();
g2.drawImage(image, 0, 0 ,null);
g2.dispose();
}
public void SetupUI() {
uploadButton = new JButton("UPLOAD");
uploadButton.setBounds(WIDTH / 2, HEIGHT - 40, 50, 30);
uploadButton.setToolTipText("Press this button to upload your AI to the ship");
uploadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//TO DO: Make upload button compile and run the users code
}
});
this.add(uploadButton);
this.setVisible(true);
}
答案 0 :(得分:0)
我决定重做代码来渲染游戏组件。问题似乎是GUI按钮和图像共享相同的屏幕空间,然后图像重新绘制每帧按钮。我想要的是gui覆盖在图像上,但我仍然不知道如何实现这一目标。
相反,我创建了两个单独的JPanel,一个用于将GUI元素保存在'功能区中。在图像上方,并且一个用于保持图像,其中两个面板都不重叠,然后将这两个面板打包到另一个面板中,然后将其分配给JFrame(感觉这是来自Emperors New Groove lol的场景)。每个面板都分配了一个布局。现在可以根据需要频繁地渲染其自己面板中的图像,而不会干扰gui。请记住按顺序绘制您想要的任何图像,例如绘制背景,然后是玩家。
我无法解决原始问题,但这是一个不错的解决方法。