Création de jeux (1ere partie) : calcul d’un angle et d’une distance

J’ai laissé passé pas mal de temps entre le dernier article et celui ci, je vais me rattraper avec toute une série sur la création de jeux Flash.


Ce 1er article va utiliser une formule simple pour trouver un angle entre 2 points.

angleRadian = Math.atan2(px1 - px2, py1 - py2);
angleDegree = angleRadian * (180 / Math.PI);

Et une autre formule qui permet de trouver la distance entre 2 points.
distance= Math.sqrt(px1*px2 + py1*py2);

On peut ensuite utiliser ces formules dans flash pour tracer un trait entre le centre de la scene et la position de la souris.

exemple :

code :

package {
	import flash.display.Graphics;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
 
 
	[SWF(width = 600, height = 600, backgroundColor = 0x0, frameRate = 30)]
 
	/**
	 * @author Lorenzo
	 */
	public class test1_DirectionDistance extends Sprite {
 
		public function test1_DirectionDistance():void {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private var _shapeTrait:Shape;
 
 
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			stage.scaleMode = 'noScale';
 
			// création d'un Shape "trait" positionnée au centre de la scene (représente un vecteur)
			_shapeTrait = this.addChild(new Shape()) as Shape;
			_shapeTrait.x = stage.stageWidth / 2;
			_shapeTrait.y = stage.stageHeight / 2;
 
			var g:Graphics = _shapeTrait.graphics;
			g.lineStyle(0, 0xFFFFFF, 1, false, 'none');
			g.lineTo(1, 0);
 
			// écouteur des mouvements de la souris
			stage.addEventListener(MouseEvent.MOUSE_MOVE, evtStageMouseMove);
		}
 
 
		private function evtStageMouseMove(ev:MouseEvent):void {
			var px:Number = ev.stageX - _shapeTrait.x;
			var py:Number = ev.stageY - _shapeTrait.y;
 
			// rotation du trait vers la position de la souris
			var rad:Number = Math.atan2(py, px);// calcul de l'angle entre 2 points en radian
			var deg:Number = rad * (180 / Math.PI);// conversion en degrée
			_shapeTrait.rotation = deg;
 
			// étirement du trait sur la position de la souris
			var dist:Number = Math.sqrt(px*px + py*py);// calcul de la distance entre 2 points
			_shapeTrait.scaleX = dist;
		}
 
	}
}

Faire tous ces calculs pour tracer une bête trait peut paraitre inutile puisqu’il suffisait d’utiliser un moveTo/lineTo entre le centre de la scene et la position de la souris mais ces formules sont la base de pas mal de jeu ;)

Laisser un commentaire

*