我用Java编写游戏已经有一段时间了,我陷入了图像处理的困境。我不知道为什么,但它在我之前的所有游戏中都有效。我说得对吗?谢谢你的建议!
public class Game extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private Timer gameLoop;
public static final int WIDTH = 800;
public static final int HEIGHT = 500;
public static final Dimension SCREEN_SIZE = new Dimension(WIDTH, HEIGHT);
public static final int FRAMERATE = 60;
public static final String TITLE = "MedievalGame";
public BufferedImage[] images = new BufferedImage[4];
public int x = 100;
public int y = 100;
public int width = 100;
public int height = 100;
public Game() {
this.setPreferredSize(SCREEN_SIZE);
this.setFocusable(true);
try {
images[0] = ImageIO.read(getClass().getResourceAsStream("path"));
} catch (IOException e) {
e.printStackTrace()
}
gameLoop = new Timer(1000 / FRAMERATE, this);
gameLoop.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(images[0], x, y, width, height, null);
}
public void actionPerformed(ActionEvent e) {
this.repaint();
}
public static void main(String[] args) {
JFrame window = new JFrame(TITLE);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.add(new Game());
window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
}
}
我查了很多类似的问题,但没有一个能解决我的问题。
答案 0 :(得分:1)
您的代码适用于我:
我所做的只是将图像添加到.java
文件的同一个包中,我没有使用IDE,但你可能正在这样做,所以你可以管理包......
我更确定这是一个路径问题,而不是代码问题,但是一旦您使用JAR文件导出它们,您的图像将成为嵌入式资源,因此明智地将它们视为已经存在并加载它们如图所示here
同时阅读:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(普遍共识是肯定并覆盖getPreferredSize()
方法)......
答案 1 :(得分:0)
我在这里运行您的代码并正常运行
检查您正在加载的图片是否为空,因此enemyImages [0]无效
请确保您没有调用现有的JFrame方法" paintComponents",因此将方法paintComponent的名称更改为其他名称,然后再次运行
拥抱
答案 2 :(得分:0)
我弄清楚问题是什么。关于代码的一切都是正确的,但图像不知何故被破坏了。我尝试使用其他图像,它的工作原理。谢谢大家的时间和帮助。