Bonjours.

Je suis en train de débuter la réalisation d'un petit jeu type RPG ; et j'en suis encore à la phase "faire bouger le perso dans tout les sens"... .
Malheureusement, je rencontre un petit bug assez ennuyant... en l'occurrence mon héros ne se déplace que vers le haut et la gauche ( Alors que j'ai codé les autres directions... . ) OO !?

Voici le code :

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
// VARIABLES
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
 
 
var ToucheGauche:Boolean=false;
var ToucheHaut:Boolean=false;
var ToucheDroit:Boolean=false;
var ToucheBas:Boolean=false;
var ToucheEspace:Boolean=false;
 
var vitesse_heros:Number =4;   
var direction_heros:Number=1;
var action_heros:Number=1
 
var liste_action:Array=new Array("1","2","3","4") 
 
 
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
// FONCTIONS
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
 
function tester_touche_appuyer(e:KeyboardEvent):void {
	switch (e.keyCode) {
 
		case 32:
		ToucheEspace=true;
		break;
 
		case 37:
		ToucheGauche=true;
		break;
 
		case 38:
		ToucheHaut=true;
		break;
 
		case 39:
		ToucheDroit=true;
		break;
 
		case 40:
		ToucheBas=true;
		break;
 
		Default:
		break;
	}
}
 
function tester_touche_relacher(e:KeyboardEvent):void {
	switch (e.keyCode) {
 
		case 32:
		ToucheEspace=false;
		break;
 
		case 37:
		ToucheGauche=false;
		break;
 
		case 38:
		ToucheHaut=false;
		break;
 
		case 39:
		ToucheDroit=false;
		break;
 
		case 40:
		ToucheBas=false;
		break;
 
		Default:
		break;
	}
}
 
function afficher_heros(x:Number,y:Number) {
	heros.x+=x;
	heros.y+=y;
	if (heros.currentFrame!=(direction_heros+action_heros*4)){
	heros.gotoAndStop(direction_heros+action_heros*4);
	}
}
 
function deplacer_heros(event:Event) {
	if (ToucheGauche==true) {
		action_heros=1;
		direction_heros=4;
		afficher_heros(-vitesse_heros,0)
	} else {
		if (ToucheDroit==true) {
			action_heros=1;
			direction_heros=2;
			afficher_heros(-vitesse_heros,0)
		} else {
			if (ToucheHaut==true) {
				action_heros=1;
				direction_heros=1;
				afficher_heros(0,-vitesse_heros);
			} else {
				if (ToucheBas==true) {
					action_heros=1;
					direction_heros = 3;
					afficher_heros(0,-vitesse_heros);
				} else {
					if (ToucheEspace==true) {
						action_heros=2;
						afficher_heros(0,0);
					} else {
						// aucune touche pressé
						action_heros=0;
						afficher_heros(0,0)
					}
				}
			}
		}
	}
}
Au passage, j'ai remarquée que si j'utilise ce code là, sa marche impec' !

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
var ToucheGauche:Boolean=false;
var ToucheHaut:Boolean=false;
var ToucheDroit:Boolean=false;
var ToucheBas:Boolean=false;
 
var vitesse_heros:Number =4;
// le clip se déplace de 4 pixel en 4 pixel
 
function tester_touche_appuyer(e:KeyboardEvent):void {
	switch (e.keyCode) {
 
		case 37:
		ToucheGauche=true;
		break;
 
		case 38:
		ToucheHaut=true;
		break;
 
		case 39:
		ToucheDroit=true;
		break;
 
		case 40:
		ToucheBas=true;
		break;
 
		Default:
		break;
	}
}
 
function tester_touche_relacher(e:KeyboardEvent):void {
	switch (e.keyCode) {
 
		case 37:
		ToucheGauche=false;
		break;
 
		case 38:
		ToucheHaut=false;
		break;
 
		case 39:
		ToucheDroit=false;
		break;
 
		case 40:
		ToucheBas=false;
		break;
 
		Default:
		break;
	}
}
 
function deplacer_heros(event:Event) {
	if (ToucheGauche==true) {
		heros.x-=vitesse_heros;
		direction_heros = 4;
	} else {
		if (ToucheDroit==true) {
			heros.x+=vitesse_heros;
			direction_heros = 2;
		} else {
			if (ToucheHaut==true) {
				heros.y-=vitesse_heros;
				direction_heros = 1;
			} else {
				if (ToucheBas==true) {
					heros.y+=vitesse_heros;
					direction_heros = 3;
				}
			}
		}
	}
	heros.gotoAndStop(direction_heros);
}
Le problème étant que le livre sur lequel je me base ( ActionScript3, développez des jeux en flash, de Henri Blum. ) indique clairement que c'est une mauvaise façon de coder, car gourmande en ressource et potentiellement source d'erreur... .

Alors ? A votre avis ?