我试图创建一个基本游戏,其中角色可以在屏幕上移动图像,该图像位于背景图像之上。这是我的主要方法,我将所有这些设置为:
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Stuff");
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
// Create a panel with a component to be moved
JPanel character = new JPanel();
JLabel component = new JLabel();
component.setIcon(new ImageIcon("C:/Users/Cory/Desktop/img/eagle.jpg"));
component.setSize( component.getPreferredSize() );
component.setLocation(200, 200);
component.repaint();
JButton left = addMotionSupport( component );
character.add(component);
character.repaint();
//end moveable
frame.add( character );
frame.repaint();
JPanel background = new JPanel();
JLabel contentPane = new JLabel();
contentPane.setIcon(new ImageIcon("C:/Users/Cory/Desktop/img/background.png"));//sets contentPane to display the background
contentPane.setSize(contentPane.getPreferredSize());
background.add(contentPane);
background.repaint();
frame.add(background);
frame.repaint();
//frame.add(left, BorderLayout.SOUTH);
frame.setSize(1000, 800);
frame.setVisible(true);
}
});
}
我遇到的问题如下。我能够显示背景图像 OR 可移动图像,但不能同时显示两者。我认为正在发生的是两个jpanels重叠'在彼此之上 - 这是正确的吗?我该如何解决这样的问题?我浏览了一下API,我找到了一个名为JLayeredPane的东西,但我不确定如何使用它,如果它甚至是正确的工具。您提供的任何见解都将非常受欢迎。
N.B。 ' addMotionSupport'方法只将KeyListener添加到传递的参数中。
答案 0 :(得分:2)
角色可以在屏幕上移动图像,该图像位于背景图像的顶部。
然后你需要将角色添加到背景中。
所以基本代码应该是:
JLabel character = new JLabel(...);
character.setSize( character.getPreferredSize() );
JLabel background = new JLabel(...);
background.add( character );
frame.add( background );
您不需要额外的面板。您可以直接在框架上添加标签。
您需要设置字符标签的大小,因为JLabel不使用布局管理器。因此,在这种情况下,当您将角色添加到背景组件时,您负责管理角色的大小和位置。该位置将默认为(0,0);
您不需要所有frame.repaint()
语句,框架将在可见时绘制。不要使用frame.setSize(),而是使用frame.pack()。然后框架将设置为背景图像的大小。