我的游戏背景图片(JFrame)

时间:2015-03-23 19:41:51

标签: java swing

我最近开始开发一个Java迷你游戏,而且我一直在设法在我的框架上放置背景图像。我在StackOverflow上搜索了这个,我找到了一些有很好建议的线程,但我根本无法在我已经完成的Frame上实现它们(事情是我找到了制作新帧并在其上添加背景图像的方法)新创建的框架与类,但我已经创建了我的框架,我只是不能使代码在我的项目上工作。)

以下是我发现的内容:http://java-demos.blogspot.ro/2012/09/setting-background-image-in-jframe.html

我尝试了一切,但无法使其发挥作用。我能做的最好的就是这一行:**frame**.setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png")));

这条线成功设置了我的背景图片,但我不能再用我的键控制广场了,我有一些错误。

这是我的相关代码,我需要帮助将背景图像应用到我的Frame(带框架,画布或面板,欢迎任何选项)。

    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();

   }

2 个答案:

答案 0 :(得分:0)

不要将AWT组件(Canvas)与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;
           }
       });

   }

答案 1 :(得分:0)

请记住,java.awt.Canvas(以及所有AWT组件)不支持透明度。

一般来说,你不应该将BufferStrategy与Swing混合,因为它们会使用不同的绘画过程,这可能会导致问题。

不是试图通过不同的组件绘制背景,只需将背景直接绘制到BufferStrategy,然后将剩余的游戏状态绘制在其顶部......