![]()
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
![]()