Alors voilà, j'ai fait un petit programme (cf code simplifié) où un personnage doit se déplacer vers le haut quand on appuie sur la touche "i". Pour cela je me suis fortement inspiré d'un des articles du site d'eclipse.
Le problème c'est que l'animation qui correspnd à ce mouvement comprend cinq phases pour rendre le mouvement du personnage, hors mon programme ne m'affiche que la dernière des images.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public class Start {
	public static void main(String[] args) {
		Jeu jeu = new Jeu();
	}
}
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
 
public class Jeu {
 
	private Display display;
	private Shell shell;
	private Canvas canvas;
	private GC gc;
	//Tableau dans lequel on va stocker les images de l'animation du personnage.
	private Image[] images;
	//Delais d'affichage entre chaque phase d'animation du personnage.
	private int delayTime;
	//x et y représentent la position du personnage.
	private int x;
	private int y;
	//Ecart entre deux animations.
	private int step;
 
	public Jeu() {
 
		step = 5;
		x = 150;
		y = 150;
		delayTime = 150;
 
		display = new Display();
		shell = new Shell(display, SWT.MIN | SWT.CLOSE);
		shell.setLocation(0, 0);
		shell.setSize(300, 300);
 
		//On initialise le tableau d'image avec les fichiers choisis.
		images = new Image[4];
		images[0] = new Image(display, ".\\rpg1-1.png");
		images[1] = new Image(display, ".\\rpg1-2.png");
		images[2] = new Image(display, ".\\rpg1-3.png");
		images[3] = images[1];
 
		final Image image = new Image(display, images[1], SWT.IMAGE_COPY);
		gc = new GC(image);
 
		canvas = new Canvas(shell,SWT.NONE);
		canvas.setSize(300, 300);
		canvas.setLocation(0, 0);
		canvas.setBackground(new Color(display, 0, 0, 0));
		canvas.addPaintListener(new PaintListener(){
			public void paintControl(PaintEvent event){
				event.gc.drawImage(image, x, y);
			}
		});   
 
		//Lorsqu'on appuyra sur la touche "i" on veut que le personnage monte.
		canvas.addKeyListener(new KeyListener() {
			public void keyPressed(KeyEvent e) {
				String key = "" + e.character;
				if (key.equals("i")) {
					display.syncExec(
						new Runnable() {public void run() {
							walkForward();
						}
					});
				}
			}
			public void keyReleased(KeyEvent e) {
			}
		});
 
		shell.open();
		while(!shell.isDisposed()){
			if(!display.readAndDispatch())
				display.sleep();
		}
	}
 
	//Fonction faisant l'animation du personnage qui monte vers le haut.
	private void walkForward() {
		for (int i=0; i<=3; i=i+1) {
			y = y - step;
			ImageData imageData = images[i].getImageData();
			Image newImage = new Image(display, imageData);
			gc.drawImage(newImage, imageData.x, imageData.y);
			newImage.dispose();
			canvas.redraw();
			try {
				Thread.sleep(delayTime);
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}
}
En fait tout ce passe comme ci dans la fonction walkForward() les images images[0]..images[2] n'étaient jamais affichées, seule images[3] est rendue dans ma fenetre.

J'ai essayé de modifier le delayTime mais même avec un plus important j'ai toujours une seule phase d'animation au lieu des cinqs.

Si quelqu'un a une idée je suis preneur.

Je donne des liens pour les images si il y en a qui on envie de s'amuser

http://membres.lycos.fr/denebscoalition/rpg1-1.png
http://membres.lycos.fr/denebscoalition/rpg1-2.png
http://membres.lycos.fr/denebscoalition/rpg1-3.png