0

質問 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();
    }

}
4

1 に答える 1

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
于 2009-03-08T20:09:21.467 に答える