Domanda

Domanda 1: come devo strutturare il mio progetto in modo che i file audio e di immagini possano essere caricati più facilmente? In questo momento, ho la cartella:

C:\java\pacman

con la sottodirectory

C:\java\pacman\src

contenente tutto il codice e

C:\java\pacman\assets

contenente le immagini e i file .wav. È la struttura migliore o dovrei mettere le risorse da qualche altra parte?

Domanda 2:

Qual è il modo migliore per fare riferimento alle immagini / ai suoni senza utilizzare l'intero percorso, ad esempio C: \ java \ pacman \ assets \ something.png ? Se uso la funzione getCodeBase () sembra fare riferimento alla C: \ java \ pacman \ bin anziché a C: \ java \ pacman \ .

Voglio usare una tale funzione / classe che funzionerebbe automaticamente quando compilo l'applet in un barattolo così come adesso quando collaudo l'applet tramite eclipse.

Domanda 3: come devo caricare le immagini / i suoni? Questo è quello che sto usando ora:

1) Per immagini generali:

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

Le immagini restituite da questa funzione sono utilizzate nel metodo drawImage della classe Graphics nel metodo paint dell'applet.

2) Per un'immagine con buffer, utilizzata per ottenere immagini secondarie e caricare sprite da un foglio sprite:

public BufferedImage getSheet() throws IOException
{
    return ImageIO.read(new File(img.getPath("pacman-sprites.png")));

}

In seguito:

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) Per i file audio:

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

}
È stato utile?

Soluzione

Inseriscili sul tuo percorso di classe (posizionali con i tuoi file .class) e caricali usando 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);
    }
}

Uscita console:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top