ActionScript: Move an object with keyboard with camera relative control

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