Question

Question 1: Comment structurer mon projet de manière à ce que les fichiers audio et les images puissent être chargés plus facilement? En ce moment, j'ai le dossier:

C:\java\pacman

avec le sous-répertoire

C:\java\pacman\src

contenant tout le code et

C:\java\pacman\assets

contenant les images et les fichiers .wav. Est-ce la meilleure structure ou devrais-je placer les actifs ailleurs?

Question 2:

Quel est le meilleur moyen de faire référence aux images / sons sans utiliser le chemin complet, par exemple C: \ java \ pacman \ assets \ quelque chose.png ? Si j'utilise la fonction getCodeBase () , il semble faire référence au C: \ java \ pacman \ bin au lieu de C: \ java \ pacman \ .

Je veux utiliser une telle fonction / classe qui fonctionnerait automatiquement lorsque je compilerai l'applet dans un bocal, ainsi que maintenant, lorsque je testerai l'applet via eclipse.

Question 3: Comment dois-je charger les images / sons? C'est ce que j'utilise maintenant:

1) Pour les images générales:

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

Les images renvoyées par cette fonction sont utilisées dans la méthode drawImage de la classe Graphics dans la méthode paint de l'applet.

2) Pour une image mise en mémoire tampon, utilisée pour obtenir des sous-images et charger des images-objets à partir d'une feuille d'images-objets:

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

}

Plus tard:

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

}
Était-ce utile?

La solution

Placez-les sur votre chemin de classe (avec vos fichiers .class) et chargez-les à l'aide de 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);
    }
}

Sortie de la 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top