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

}
War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top