Bonjour, j'ai un probleme au niveau de mon projet en java. La compilation s’exécute parfaitement, seulement, si j’exécute le programme via le JAR ca me met "Le sprite xxxx est inconnu", donc en gros il n'arrive pas a acceder au dossier de mes images.. Je pense que le problème vient du Hashmap, puisqu'il m'arrive souvent de redéfinir le dossier de la librairie quand j'ouvre le programme. Je suis pas mal paumé la.
Voici la classe Sprite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 package iut; import java.awt.Graphics; import java.awt.Image; /** * Une classe représentant un Sprite, c'est à dire une image mouvante (personnage, objet, etc...) */ public class Sprite { private Image image; /**< l'image dessinée par le sprite */ /** * Crée un nouveau sprite à partir d'une image * @param i l'image de départ */ public Sprite(Image i) { image = i; } /** * @return la largeur du sprite */ public int getWidth(){ return image.getWidth(null); } /** * @return la hauteur du sprite */ public int getHeight(){ return image.getHeight(null); } /** * Dessine le sprite * @param g la surface d'affichage * @param x la position gauche du sprite * @param y la position haute du sprite */ public void draw(Graphics g, int x, int y) { g.drawImage(image,x,y,null); } }La methode qui appelle ces classes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 package iut; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Image; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import java.util.HashMap; import javax.imageio.ImageIO; /** * Singleton permettant de construire ou récupérer les sprites à partir de leur nom * Le nom du sprite doit correspondre à un fichier .png * @SuppressWarnings("unchecked") */ public class SpriteStore { private static SpriteStore instance=null; private SpriteStore() { } public static SpriteStore get() { if(instance==null) instance=new SpriteStore(); return instance; } private HashMap sprites = new HashMap(); /** * Fournit un sprite à partir de son nom * @param nom le nom symbolique du sprite * @return le sprite construit * @throw Exception si le sprite de ce nom n'existe pas ou ne peut pas etre chargé */ public Sprite getSprite(String nom) throws Exception { Sprite sprite=(Sprite)sprites.get(nom); if(sprite==null) // pas encore chargé sprite = loadSprite(nom); return sprite; } private Sprite loadSprite(String nom) throws Exception { Sprite sprite=null; BufferedImage sourceImage = null; try { URL url = this.getClass().getClassLoader().getResource(nom+".png"); if (url == null) { throw new Exception("Le sprite "+nom+" est inconnu."); } sourceImage = ImageIO.read(url); } catch (IOException e) { throw new Exception("Le sprite "+nom+" ne peut etre chargé"); } GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); Image image = gc.createCompatibleImage(sourceImage.getWidth(),sourceImage.getHeight(),Transparency.BITMASK); image.getGraphics().drawImage(sourceImage,0,0,null); sprite = new Sprite(image); sprites.put(nom,sprite); return sprite; } }
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 protected int x; /**< Abssisse courante */ protected int y; /**< Ordonnée courante */ protected int hauteur; /**< Hauteur du sprite */ protected int largeur; /**< Largeur du sprite */ protected String image; /**< Nom de l'image du sprite */ public void draw(Graphics g) throws Exception { Sprite s = SpriteStore.get().getSprite(image); s.draw(g, x, y); hauteur = s.getHeight(); largeur = s.getWidth(); }![]()
Partager