问题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的drawImage
方法中Graphics
类的paint
方法。
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();
}
}
答案 0 :(得分:1)
将它们放在类路径上(将它们放在.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