问题1:我应该如何构建项目以便最容易地加载声音和图像文件?现在,我有文件夹:

C:\java\pacman

使用子目录

C:\java\pacman\src

包含所有代码,

C:\java\pacman\assets

包含图像和.wav文件。这是最好的结构还是我应该将资产放在其他地方?

问题2:

在不使用完整路径(如 C:\ java \ pacman \ assets \ something.png )的情况下,引用图像/声音的最佳方法是什么?如果我使用 getCodeBase()函数,它似乎引用 C:\ java \ pacman \ bin 而不是 C:\ java \ pacman \

我想使用这样一个函数/类,当我在jar中编译applet时,以及当我通过eclipse测试applet时,它会自动工作。

问题3:我应该如何加载图像/声音?这就是我现在正在使用的:

1)对于一般图像:

import java.awt.Image;

public Image getImg(String file)
{
          //imgDir in this case is a hardcoded string containing
          //"C:\\java\\pacman\\assets\\"
    file=imgDir + file;
    return new ImageIcon(file).getImage();
}

从此函数返回的图像用于applet的 paint 方法中 Graphics 类的 drawImage 方法。

2)对于缓冲图像,用于从精灵表中获取子图像和加载精灵:

public BufferedImage getSheet() throws IOException
{
    return ImageIO.read(new File(img.getPath("pacman-sprites.png")));

}

随后:

public void loadSprites()
{
    BufferedImage sheet;
    try
    {
        sheet=getSheet();

        redGhost.setNormalImg(sheet.getSubimage(0, 60, 20, 20));
        redGhost.setUpImg(sheet.getSubimage(0, 60, 20, 20));
        redGhost.setDownImg(sheet.getSubimage(30, 60, 20, 20));
        redGhost.setLeftImg(sheet.getSubimage(30, 60, 20, 20));
        redGhost.setRightImg(sheet.getSubimage(60, 60, 20, 20));    
    }
    catch (IOException e)
    {
        System.out.println("Couldnt open file!");
        System.out.println(e.getLocalizedMessage());
    }   
}

3)对于声音文件:

import sun.audio.*;
import java.io.*;
public synchronized void play() {
    try {
            InputStream in = new FileInputStream(filename);
            AudioStream as = new AudioStream(in);
            AudioPlayer.player.start(as); 

    } catch (IOException e) {
            e.printStackTrace();
    }

}
有帮助吗?

解决方案

将它们放在类路径上(将它们放在.class文件中)并使用 ClassLoader

爪哇:

package mypackage;

public class MyClass {
    public static void main(String[] args) {
        java.net.URL url = MyClass.class.getResource("/mypackage/image.gif");
        System.out.println(url);
    }
}

控制台输出:

C:\resource>dir /b /s
C:\resource\bin
C:\resource\src
C:\resource\bin\mypackage
C:\resource\bin\mypackage\image.gif
C:\resource\bin\mypackage\MyClass.class
C:\resource\src\mypackage
C:\resource\src\mypackage\MyClass.java

C:\resource>java -cp bin mypackage.MyClass
file:/C:/resource/bin/mypackage/image.gif
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top