Frage 1: Wie sollte ich mein Projekt strukturieren, damit die Ton- und Bilddateien am einfachsten geladen werden können? Gerade jetzt, ich habe den Ordner:Wie verwendet man Ton und Bilder in einem Java-Applet?
C:\java\pacman
mit dem Unterverzeichnis
C:\java\pacman\src
den gesamten Code enthält, und
C:\java\pacman\assets
enthält, die Bilder und WAV-Dateien. Ist das die beste Struktur oder sollte ich das Vermögen woanders hinlegen?
Frage 2:
Was ist der beste Weg, um die Bilder zu beziehen/Sounds, ohne den vollständigen Pfad beispiel C:\java\pacman\assets\something.png
zu ihnen? Wenn ich die getCodeBase()
Funktion verwende, scheint es sich auf die C:\java\pacman\bin
statt C:\java\pacman\
zu beziehen.
Ich möchte eine solche Funktion/Klasse verwenden, die automatisch funktionieren würde, wenn ich das Applet in einem Jar kompiliere sowie gerade jetzt, wenn ich das Applet durch Eclipse teste.
Frage 3: Wie sollte ich die Bilder/Sounds laden? Dies ist, was ich verwende jetzt:
1) Allgemeine Bilder:
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();
}
Die Bilder von dieser Funktion zurück im drawImage
Methode der Graphics
Klasse in der paint
Methode des Applets verwendet werden.
2) Für eine gepufferte Bild, das Unter-Bilder und Last Sprites aus einem Sprite Blatt zu bekommen verwendet wird:
public BufferedImage getSheet() throws IOException
{
return ImageIO.read(new File(img.getPath("pacman-sprites.png")));
}
Später:
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) Für Tondateien:
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();
}
}
Ist immer null noch nicht funktioniert :(zurück, wenn ich das Bild in den Klassenpfad setzen –
System.out.println ("Es ist "+ Datei +", "+ this.getClass(). getClassLoader(). getResource (Datei)); gibt:" Es ispacman-intro.png, null ", und in der nächsten Zeile bekomme ich eine IllegalArgumentException, wenn ich Versuchen Sie, die Null-Datei zu verwenden –
Setzen Sie die. Png, wo Sie Ihre Java-Datei haben und tun: URL u rl = this.getClass(). getResource ("player.png"); System.out.println (URL); – Tommy