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
// 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 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; } }
[swf:/wp-content/uploads/2011/01/www.benoitfreslon.com-Move-an-objet-with-keyboard-with-camera-relative-control.swf 550 400]
Télécharger la source : www.benoitfreslon.com-Move-an-objet-with-keyboard-with-camera-relative-control.zip