我最近完成了我正在制作的游戏的基础知识,我将把它发送给一些朋友,但每当他们打开.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];
}
这就是我想要使用的。但我这样做了,并改变了我的其余代码来支持它。每当我运行游戏时,我都会遇到一些错误。这一切都指向
此: 如果(的getBounds()。相交(tempEnemy.getBounds()))
所以可能是我获取图像的方式。我怎么能解决这个问题?有没有更好的方法来获取图像?我尝试了一些,但他们没有工作。
编辑:我终于解决了所有的错误! :D唯一的问题是没有图像出现。这是my code。还有什么帮助吗?那太棒了!感谢大家到目前为止的支持!答案 0 :(得分:1)
很难说你的代码中出了什么问题。但是,我建议您将图像文件放入java项目的包中(因此它们将成为JAR文件的一部分)并使用Class.getResource()/ Class.getResourceAsStream()访问它们。这可以避免多处陷阱并将所有内容保持在一起。
如何将图像构建到包中的示例:
的myproject
图片
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中名称正确,其他所有内容都将由编译器检查)
答案 1 :(得分:0)
您的代码仍在Enemy.java中使用“C:\ Users \ Kids \ Desktop \ Java Game \ Cosmic Defense \ res \ EnemyLv2.png”。你确定这存在吗?如果您移动了Cosmic Defense文件夹,则不会。
(你在谈论改变相对路径的绝对路径,所以这可能是你的问题)
答案 2 :(得分:0)
部分原因可能是您的代码指向大小为1的数组中的索引“1”,这意味着唯一可用的索引实际上是“0”。
尝试mobImages[0] = Handler.loadImage("res/EnemyLv1.png");