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
| //je créé un objet qui contient la position de l'origine du rayon (ici je le met au milieu de l'ecran)
var center:Object = new Object();
center.x = Stage.width/2;
center.y = Stage.height/2;
//je créé un clip qui va contenir le rayon
var render:MovieClip = this.createEmptyMovieClip("render",0);
onmousemove = function(){
//je recupere l'angle de la souris par rapport a l'origine du rayon
//l'angle n'est pas un chiffre compris entre 0 et 360 car flash ne compte pas les angle
//en degré mais en radian (sous la forme d'un chiffre compris entre 0 et 2*PI)
var dx:Number = _xmouse - center.x;
var dy:Number = _ymouse - center.y;
var angle:Number = Math.atan2(dy,dx);
//maintenant qu'on sait dans quelle direction on veut envoyer notre rayon,
//on veut savoir sa distance
//je créé une boucle qui va travailler tant qu'on a pas obtenu le resultat
//on connait notre point de depart, on connait l'angle ; il suffit de verifier
//chaque point de cette droite jusqu'a ce que
// - le hitTest avec le clip contenant tout les obstacle == true
// - le point est en dehors de l'animation
// dés que l'on atteint l'une de ces deux conditions, on connait la position finale
// de notre trait : c'est le dernier point qu'on a verifier
var isWorking:Boolean = true;
var dist:Number = 0;
var px:Number;
var py:Number;
while(isWorking){
px = center.x + Math.cos(angle) * dist;
py = center.y + Math.sin(angle) * dist;
if(mc.hitTest(px,py,true) || px <= 0 || px >= Stage.width || py <= 0 || py >= Stage.height){
isWorking = false;
break;
}
dist ++;
}
//enfin , on peut dessiner notre trait
render.clear();
render.lineStyle(0,0,100);
render.moveTo(center.x,center.y);
render.lineTo(px , py);
updateAfterEvent(); |
Partager