0

我最近完成了我正在制作的游戏的基础知识,并打算将其发送给一些朋友,但每当他们打开 .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 唯一的问题是没有图像出现。这是我的代码。还有什么帮助吗?那太棒了!感谢大家迄今为止的支持!

4

3 回答 3

1

很难说你的代码出了什么问题。但是,我建议您将图像文件放入 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 中名称正确,编译器将检查其他所有内容)

于 2012-08-06T14:39:09.113 回答
0

您的代码仍然使用 Enemy.java 中的“C:\Users\Kids\Desktop\Java Game\Cosmic Defense\res\EnemyLv2.png”。你确定这存在吗?如果您移动了 Cosmic Defense 文件夹,则不会。

(您在谈论将绝对路径更改为相对路径,所以这可能是您的问题)

于 2012-08-06T14:35:03.353 回答
0

部分原因可能是您的代码指向大小为 1 的数组中的索引“1”,这意味着唯一可用的索引实际上是“0”。

尝试mobImages[0] = Handler.loadImage("res/EnemyLv1.png");

于 2012-08-06T17:19:09.880 回答