2009-03-08 8 views
1

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

} 

Antwort

1

Platzieren Sie sie auf Ihrem Klassenpfad (legen Sie sie mit Ihren .class-Dateien ab) und laden Sie sie mit der 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); 
    } 
} 

Console Ausgabe:

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 
+0

Ist immer null noch nicht funktioniert :(zurück, wenn ich das Bild in den Klassenpfad setzen –

+0

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 –

+0

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

Verwandte Themen