我正在尝试制作我的第一个java游戏。我目前正忙于添加纹理,但我遇到了一个问题。
我可以加载一个图像,它会出现在游戏中,但如果我在photoshop中更改图像,然后重新运行游戏,图像将不会改变。
此外,如果我复制了图像,然后改变路径指向游戏抛出的图像,就会出错。
public static Render floor = loadBitmap("/textures/floor.png");
这段代码指向图像的存储位置,游戏将运行,但如果我在photoshop中编辑图像,游戏中不会发生任何变化。
public static Render floor = loadBitmap("/textures/floorp.png");
如果我将路径更改为同一文件夹中的另一个图像,我会收到此错误。
Exception in thread "Thread-2" java.lang.ExceptionInInitializerError
at com.mime.minefront.graphics.Render3D.floor(Render3D.java:42)
at com.mime.minefront.graphics.Screen.render(Screen.java:27)
at com.mime.minefront.Display.render(Display.java:144)
at com.mime.minefront.Display.run(Display.java:112)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: input == null!
at com.mime.minefront.graphics.Texture.loadBitmap(Texture.java:20)
at com.mime.minefront.graphics.Texture.<clinit>(Texture.java:8)
... 5 more
Caused by: java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1388)
at com.mime.minefront.graphics.Texture.loadBitmap(Texture.java:12)
... 6 more
BUILD SUCCESSFUL (total time: 1 second)
这是我在纹理类中使用的代码。
package com.mime.minefront.graphics;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Texture {
public static Render floor = loadBitmap("/textures/floorp.png");
public static Render loadBitmap(String fileName) {
try {
BufferedImage image = ImageIO.read(Texture.class.getResource(fileName));
int width = image.getWidth();
int height = image.getHeight();
Render result = new Render(width, height);
image.getRGB(0, 0, width, height, result.pixels, 0, width);
return result;
} catch (Exception e) {
System.out.println("CRASH!");
throw new RuntimeException(e);
}
}
}
加载的路径似乎在应用程序Jar文件中。很可能您正在保存图像,但没有更新Jar,因此更改不会传播。这也可以解释为什么没有找到floorp.png。在更改映像目录时重新生成应用程序。