Wie Ton und Bild in einem Java-Applet zu benutzen?
-
05-07-2019 - |
Frage
Frage 1: Wie soll ich mein Projekt strukturieren, so können die Ton- und Bilddateien am einfachsten geladen werden? Gerade jetzt, ich habe den Ordner:
C:\java\pacman
mit dem Unterverzeichnis
C:\java\pacman\src
enthält den gesamten Code, und
C:\java\pacman\assets
die Bilder und .wav-Dateien enthält. Ist dies die beste Struktur oder soll ich das Vermögen setze woanders?
Frage 2:
Was ist der beste Weg, um die Bilder zu beziehen / Sounds, ohne den vollständigen Pfad beispiels C:\java\pacman\assets\something.png
zu ihnen? Wenn ich die getCodeBase()
Funktion verwenden, es scheint die C:\java\pacman\bin
statt C:\java\pacman\
zu verweisen.
Ich möchte eine solche Funktion / Klasse verwenden, die automatisch funktionieren würde, wenn ich das Applet in einem Glas sowie jetzt kompilieren, wenn ich das Applet über Eclipse testen.
Frage 3: Wie soll ich die Bilder / Sounds laden? Das ist, was ich jetzt mit:
1) Für 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ückgegeben werden, in dem drawImage
Verfahren der Graphics
Klasse in der paint
Methode des Applets verwendet.
2) Für ein Bild gepuffert, der verwendet wird, untergeordnete Bilder und Last Sprites aus einem Sprit Blatt zu bekommen:
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 die Sound-Dateien:
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();
}
}
Lösung
Legen Sie sie auf Ihrem Classpath (legen Sie sie mit Ihrem .class-Dateien) und laden sie die 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);
}
}
Konsolenausgabe:
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