我最近完成了自己制作的游戏的基础知识,打算将其发送给一些朋友,但是每当他们打开.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中正确,其他所有内容都将由编译器检查)

07-27 23:53