質問 1: サウンド ファイルと画像ファイルを最も簡単にロードできるようにするには、プロジェクトをどのように構成すればよいですか? 現在、次のフォルダーがあります。
C:\java\pacman
サブディレクトリと
C:\java\pacman\src
すべてのコードを含み、
C:\java\pacman\assets
画像と .wav ファイルが含まれています。これが最適な構造ですか、それともアセットを別の場所に配置する必要がありますか?
質問2:
フルパスを使用せずに画像/サウンドを参照する最良の方法は何C:\java\pacman\assets\something.pngですか? 関数を使用すると、ではなくgetCodeBase()を参照しているようです。C:\java\pacman\binC:\java\pacman\
アプレットを jar にコンパイルするときに自動的に機能するような関数/クラスを使用したいと考えています。
質問 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();
}
この関数から返された画像は、アプレットのメソッド内のクラスのdrawImageメソッドで使用されます。Graphicspaint
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();
}
}