Problème d'affichage pour jeu sokoban

Fermé
Jay May - Modifié le 5 nov. 2017 à 18:19
 Jay May - 5 nov. 2017 à 19:54
Bonjour,
j'arrive a afficher un personnage qui bouge mais j'arrive pas a afficher une caisse et pourtant j'utilise le même code.

public void affichePlayer(Graphics g) {
        Image imgperso = Toolkit.getDefaultToolkit().getImage("C://Users//Nathan//Desktop//Portes ouverts/perso.png");
        g.drawImage(imgperso, (int) (player.posX * caseWidth), (int) (player.posY * caseHeight), (int) caseWidth, (int) caseHeight, null);
        
        
        
    }
    
    public void afficheCasse(Graphics g) {
         Image imgcaisse = Toolkit.getDefaultToolkit().getImage("C://Users//Nathan//Desktop//Portes ouverts/zombie.png");
         g.drawImage(imgcaisse,(int) (caisse.posCaisseX * caseWidth), (int) (caisse.posCaisseX * caseHeight), (int) caseWidth, (int) caseHeight, null);
    }
                        

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        initGlobal();
        afficheGame(g);
        afficheCasse(g);
        affichePlayer(g);
        
        repaint();

    }

voici mon code (c'est pas le toute), il y a t'il quelqu'un qui pourrais m'aider,
merci d'avance

A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 nov. 2017 à 18:30
Bonjour,

Plusieurs erreurs (mais pas sûr que ça corrige ton problème)

Dans tes deux méthodes affichePlayer et afficheCasse, tu charges l'image avec Toolkit.getDefaultToolkit().getImage(), or il ne faudrait le faire qu'une seule fois, ça ne sert à rien d'aller récupérer le fichier à chaque affichage, juste une fois lorsque le programme se lance devrait suffire.

De plus, tu as utilisé des chemins absolus pour tes fichiers (C:/...) mais si tu déplaces tes images ou que tu donnes le programme à quelqu'un d'autre ça ne marchera plus, il vaudrait mieux utiliser des chemins relatifs au programme.

private static final Image imgperso = Toolkit.getDefaultToolkit().getImage("perso.png");
private static final Image imgcaisse = Toolkit.getDefaultToolkit().getImage("zombie.png");

Remarque : est-ce normal que ton image de caisse s'appelle zombie ?

Autre erreur, tu fais un repaint(); à la fin de paintComponent(), il ne faut pas, je me demande d'ailleurs s'il est vraiment pertinent de redéfinir la méthode paintComponent ici. Dans la plupart des cas c'est la méthode paint qu'il faut redéfinir.

@Override
public void paint(Graphics g) {
    super.paint(g);
    initGlobal();
    afficheGame(g);
    afficheCasse(g);
    affichePlayer(g);
}
0
Merci ça n'a pas résolu mon problème mais au moins mon code est plus propre.

Ah et pour le zombie c'était un thème Halloween :)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > Jay May
5 nov. 2017 à 19:46
Avec le seul code que tu nous as donné je ne vois pas d'autre problème, mais ça peut venir du reste du code, par exemple dans initGlobal(), affichePlayer() ou dans les valeurs de l'objet caisse utilisées à l'affichage.
0
Jay May > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
5 nov. 2017 à 19:54
Okay au moins je sais que mon erreur ne viens pas de la merci pour ton aide.
0