我最近完成了自己制作的游戏的基础知识,打算将其发送给一些朋友,但是每当他们打开.jar时,它只是一个灰色的窗口。当我听说这是由于获取图像的方式(我使用完整路径:C:\ Users \ etc)引起的。我做了一些谷歌搜索,发现了一种方法来获取看起来更有效的图像。
private static Image[] mobImages = new Image[1];
public static void loadImages()
{
mobImages[1] = Handler.loadImage("res/EnemyLv1.png");
}
public static Image getMobImages(int index)
{
return mobImages[index];
}
这就是我要使用的。但是我做到了,并更改了其余代码以支持该功能。每当我运行游戏时,我都会遇到一些错误。所有这些都指向
这个:
if(getBounds()。intersects(tempEnemy.getBounds()))
所以大概也是我获取图像的方式。我该如何解决?还有获取图像的更好方法吗?我尝试了一些,但是没有用。
编辑:我终于解决了所有错误! :D唯一的问题是没有图像出现。再次是my code。还有其他帮助吗?那太好了!谢谢大家到目前为止的支持!
最佳答案
很难说代码中出了什么问题。但是,我建议您将图像文件放入java项目中的包中(这样它们将成为JAR文件的一部分),并使用Class.getResource()/ Class.getResourceAsStream()访问它们。这样可以避免多个陷阱,并使所有内容保持一致。
如何将图片结构化为包的示例:
我的项目
图片
ImageLocator.class
MyImage1.jpg
MyImage2.jpg
然后,ImageLocator类需要使用相对路径(仅图像名称+扩展名)来访问资源。
public class ImageLocator {
public final static String IMAGE_NAME1 = "MyImage1.jpg";
public static Image getImage(final String name) {
URL url = ImageLocator.class.getResource(name);
Image image = Toolkit.getDefaultToolkit().createImage(url);
// ensure the image is loaded
return new ImageIcon(image).getImage();
}
}
可以做得更优雅,但这应该可以帮助您入门。在ImageLocator类中将图像名称定义为常量可以避免在整个项目中分散具体路径(只要名称在ImageLocator中正确,其他所有内容都将由编译器检查)