Question 1: Comment structurer mon projet pour que les fichiers sons et images puissent être chargés plus facilement? En ce moment, j'ai le dossier:Comment utiliser le son et les images dans une applet Java?
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 dois-je mettre les actifs ailleurs?
Question 2:
Quelle est la meilleure façon de se référer aux images/sons sans utiliser le chemin complet pour les C:\java\pacman\assets\something.png
par exemple? Si j'utilise la fonction getCodeBase()
, il semble se référer à C:\java\pacman\bin
au lieu de C:\java\pacman\
. Je veux utiliser une telle fonction/classe qui fonctionnerait automatiquement quand je compilerais l'applet dans un pot aussi bien que maintenant quand je teste l'applet par éclipse.
Question 3: Comment charger les images/sons? Voilà ce que je me sers 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és dans la méthode drawImage
de la classe Graphics
dans la méthode paint
de l'applet.
2) Pour une image en mémoire tampon, qui est utilisé pour obtenir des sous-images et charge sprites à partir d'une feuille de sprite:
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 sonores:
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();
}
}
Ne fonctionne pas :(retourne toujours nulle, même quand je mets l'image dans le chemin de classe –
System.out.println ("Il donne: "It ispacman-intro.png, null", et sur la ligne suivante, je reçois une exception IllegalArgumentException essayez d'utiliser le fichier nul –
Mettez le .png où vous avez votre fichier java et faites: URL u rl = this.getClass(). getResource ("player.png"); System.out.println (url); – Tommy