Java 我的游戏背景图片(JFrame)
我最近开始开发一款Java迷你游戏,我一直在设法把背景图像放在我的框架上。我在StackOverflow上搜索了这个,我发现了几个有好建议的线程,但我无法在我已经完成的框架上实现它们。我找到了制作新框架的方法,并在新创建的框架上添加了一个带有类的背景图像,但是我已经创建了我的框架,我就是不能让代码在我的项目中工作 以下是我的发现: 我什么都试过了,但都没成功。我所能做的就是写这行:*frame**.setContentPanenew JLabelnew ImageIconC:\\Users\\Computer\\Downloads\\colored design.png 这条线成功地设置了我的背景图像,但我不能再用我的键控制正方形了,我有一些错误 这是我的相关代码,我需要帮助应用背景图像到我的框架与框架,画布或面板,任何选项都欢迎Java 我的游戏背景图片(JFrame),java,swing,Java,Swing,我最近开始开发一款Java迷你游戏,我一直在设法把背景图像放在我的框架上。我在StackOverflow上搜索了这个,我发现了几个有好建议的线程,但我无法在我已经完成的框架上实现它们。我找到了制作新框架的方法,并在新创建的框架上添加了一个带有类的背景图像,但是我已经创建了我的框架,我就是不能让代码在我的项目中工作 以下是我的发现: 我什么都试过了,但都没成功。我所能做的就是写这行:*frame**.setContentPanenew JLabelnew ImageIconC:\\Users\\C
public class Game implements Runnable{
final int WIDTH = 640;
final int HEIGHT = 480;
JFrame frame;
Canvas canvas;
BufferStrategy bufferStrategy;
public Game(){
frame = new JFrame("Basic Game");
JPanel panel = (JPanel) frame.getContentPane();
panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
panel.setLayout(null);
canvas = new Canvas();
canvas.setBounds(0, 0, WIDTH, HEIGHT);
canvas.setIgnoreRepaint(true);
panel.add(canvas);
canvas.addKeyListener(new KeyControl()); //adds the controller
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false); //non resizable window
frame.setVisible(true);
canvas.createBufferStrategy(2);
bufferStrategy = canvas.getBufferStrategy();
canvas.requestFocus();
}
不要将AWT组件画布与SWING组件JFrame混合使用。它不起作用。像这样做
public class Game extends JFrame {
public Game() {
initUI();
}
private void initUI() {
JLabel background = new JLabel("image.png");
setContentPane(background);
pack();
repaint();
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Game g = new Game();
g.setVisible(true);
running = true;
}
});
}
请记住,java.awt.Canvas和所有awt组件都不支持透明性
一般来说,您不应该将BufferStrategy与Swing混用,因为它们使用不同的绘制过程,这可能会导致问题
而不是试图通过不同的组件绘制背景,只需将背景直接绘制到您的BufferStrategy,然后在其顶部绘制剩余的游戏状态…使用JLabel的问题在于,它不会管理图像缩放/平铺,只会通过标签文本和图标属性计算标签的首选大小,而不会计算标签的内容。还请记住,默认情况下,标签没有实际安装layout manager,如果添加到JFrame的唯一组件是画布,则不应该存在问题。当在同一个容器上混合AWT和swing组件时,我们开始遇到问题:P1-不要使用空布局;2-直接在缓冲区上绘制背景图像。请记住,awt组件总是不透明的