Dans ce tutoriel je vais vous montrer comment déplacer un objet avec le clavier suivant la position de la caméra.

Contrôles relatifs à la caméra ?

La direction de votre objet est calculée en fonction de la position de la caméra.(Mario 64, Uncharted, GTA 3, etc.).

Exemple : Si j'appuis sur le bouton droit le personnage va aller vers la droite de mon écran.

Comment faire un contrôle relatif ?

  • Récupérer les informations du clavier
  • Créer un vecteur de direction
  • Déplacer l'objet en fonction du vecteur entre chaque frame
  •  
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
// Assigner 4 booléens pour chaque touche
var keyUp = false;
var keyDown = false;
var keyLeft = false;
var keyRight = false;
// Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey);
function pressKey(pEvent)
{
// If an arrow key is down, switch the value to true to the assigned variable
// Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante
if (pEvent.keyCode == 38)
{
keyUp = true;
}
else if (pEvent.keyCode == 40)
{
keyDown = true;
}
else if (pEvent.keyCode == 37)
{
keyLeft = true;
}
else if (pEvent.keyCode == 39)
{
keyRight = true;
}
}
// Assigner 4 booléens pour chaque touche

var keyUp = false;

var keyDown = false;

var keyLeft = false;

var keyRight = false;

// Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène

stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey);

function pressKey(pEvent)

{
// Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante

if (pEvent.keyCode == 38)
{
keyUp = true;
}
else if (pEvent.keyCode == 40)
{
keyDown = true;
}
else if (pEvent.keyCode == 37)
{
keyLeft = true;
}
else if (pEvent.keyCode == 39)
{
keyRight = true;
}
}

// Assigner la vitesse de l'objet
var speed = 6;

// Ajouter un écouteur d'événement entre chaque frame sur l'objet
myCircle.addEventListener(Event.ENTER_FRAME, circleEnterFrame);

function circleEnterFrame(pEvent)
{

// Créer et initialiser un vecteur 2D
var vector = new Point(0,0);
if (keyUp)
{
//Si la touche Haut est enfoncée assigner une nouvelle valeur au vecteur sur y
vector.y +-1;
}

if (keyDown)
{
// Si la touche Bas est enfoncée assigner une nouvelle valeur au vecteur sur y
vector.y +1;
}
if (keyLeft)
{
// Si la touche Gauche est enfoncée assigner une nouvelle valeur au vecteur sur x
vector.x +-1;
}
if (keyRight)
{
// Si la touche Right est enfoncée assigner une nouvelle valeur au vecteur sur x
vector.x +1;
}
// Calculer l'angle en radian formé par le vecteur de vitesse
var angle = Math.atan2(vector.y,vector.x);
// Si la taille du vecteur n'est pas nul
if (vector.length > 0)
{
// Déplacer l'objet en fonction de l'angle formé et de la vitesse
pEvent.currentTarget.x +Math.cos(angle) * speed;
pEvent.currentTarget.y +Math.sin(angle) * speed;
}
}


Télécharger la source : www.benoitfreslon.com-Move-an-objet-with-keyboard-with-camera-relative-control.zip