Javaアプレットでサウンドと画像を使用する方法は?
-
05-07-2019 - |
質問
質問1:サウンドファイルと画像ファイルを最も簡単にロードできるように、プロジェクトをどのように構成する必要がありますか?現在、フォルダがあります:
C:\java\pacman
サブディレクトリを使用
C:\java\pacman\src
すべてのコードを含む
C:\java\pacman\assets
画像と.wavファイルが含まれています。これが最良の構造ですか、それとも別の場所にアセットを配置する必要がありますか?
質問2:
フルパスを使用せずに画像/音声を参照する最良の方法は何ですか?例: C:\ java \ pacman \ assets \ something.png
getCodeBase()
関数を使用すると、 C:\ java \ pacman \ ではなく、
C:\ java \ pacman \ bin
を参照しているようです。コード>。
日食でアプレットをテストするときだけでなく、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();
}
この関数から返された画像は、アプレットの paint
メソッドの Graphics
クラスの drawImage
メソッドで使用されます。
2)subImagesを取得し、スプライトシートからスプライトをロードするために使用される、バッファリングされた画像の場合:
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 。
Java:
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
所属していません StackOverflow