Animation déclenchée par l'utilisateur

Kniebou Messages postés 2 Date d'inscription dimanche 20 novembre 2011 Statut Membre Dernière intervention 20 novembre 2011 - 20 nov. 2011 à 11:51
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 22 nov. 2011 à 00:38
Bonjour,

J'ai une question assez technique et sur laquelle je bute depuis déjà un moment, et sans avoir trouvé de réponse satisfaisante où que ce soit sur le web...

Je suis en train de développer un jeu en 2D, dans lequel le joueur dirige un personnage et le déplace dans différentes pièces (un peu à la pokémon en fait :p). Chaque pièce contient des cases, et le joueur se déplace de case en case. J'utilise le pattern MVC pour structurer mon programme.

Mon problème est le suivant : pour diriger le personnage, le joueur doit appuyer sur les touches directionnelles du clavier. Et quand il appuie sur une touche, je voudrais que l'avatar se déplace sur l'écran avec une petite animation (une succession de 4 images) pour passer d'une case à une autre, afin qu'on ait l'impression qu'il marche dans la direction voulue. Ma JFrame est composée d'un JPanel dont l'image de fond est l'image de la pièce courante, et ce JPanel contient un JLabel dont l'icône est l'image du personnage.

J'ai une classe GameModel qui, lorsqu'on appuie sur une touche directionnelle, va changer l'image qui représente le joueur, changer les coordonnées où l'avatar doit être affiché, et informer son observateur (la classe ImageView) via notifyObservers. Elle répète cela 4 fois, pour chaque image composant l'animation.
La classe ImageView va, dans sa méthode update, changer les coordonnées et l'icône du JLabel en fonction de ce qui a été changé par GameModel.

Le changement des coordonnées et de l'icône marche très bien, mais le problème c'est que le programme ne dessine que la dernière image de l'animation. En fait, la fonction paintComponent du JLabel n'est appelée qu'après que les 4 modifications ont été faites, et il n'y a donc que la dernière qui est prise en compte. J'appelle pourtant la fonction repaint après chaque modif...

Comment faire pour forcer l'image à s'afficher après avoir modifié le JLabel ? Est-ce que la méthode que j'utilise pour l'animation n'est pas adaptée ?

Si mon explication n'est pas claire ou si un bout de code peut aider, dites-le moi ^^

Merci de votre aide !!


Kniebou

3 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
20 nov. 2011 à 19:35
Salut

Désolé, mais la réponse est trop technique... ;o)

Ceci dit ;o) il y a plusieurs exemple d animation sur ce site..

GodConan ;o)
0
Kniebou Messages postés 2 Date d'inscription dimanche 20 novembre 2011 Statut Membre Dernière intervention 20 novembre 2011
20 nov. 2011 à 21:38
J'en ai déjà explorés quelques uns, mais elles ne me permettent pas de résoudre mon problème...
J'en ai trouvés qui permettaient de faire une animation mais non déclenchée par l'utilisateur, et d'autres qui permettaient à l'utilisateur de déplacer une image fixe avec les touches directionnelles. Mais je n'en ai pas trouvé qui permettent de déclencher une animation :p

En tout cas n'hésitez pas, même si vous n'avez qu'un début de réponse, je prends tout !!

Merci

Kniebou
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
22 nov. 2011 à 00:38
donc tu as tout ce qu il te faut...
déplacer une image, ou une animation, c est exactement la meme chose ...
que tu dédie un thread au mouvement ou à l animation c est pareil ;o)...

GodConan ;o)
0
Rejoignez-nous