Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 1 & ActionScript 2 Discussion :

Pointe de flèche sur un flash permettant de dessiner


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Futur Membre du Club
    Pointe de flèche sur un flash permettant de dessiner
    Bonjour
    J'ai réalisé un flash qui permet aux utilisateurs de dessiner. Mon problème est le suivant : lorsque la souris est enfoncée, c'est le début de mon trait. l'utilisateur dessine alors puis il relâche la souris pour arrêter le trait. Comment faire pour qu'une pointe de flèche apparaisse au bout du trait lorsque la souris est lâchée? ou mieux encore, est-il possible que la pointe de flèche suive le mouvement de la souris lorsque le trait est en train de grandir?
    Merci pour votre aise!
    Guietfa

  2. #2
    Membre expérimenté
    Salut, j'ai la solution en as3 mais pas en as2...

    tu peux toujours adapter cette fonction as3 que j'avais faite en m'inspirant d'un code source en pascal...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
     
    		private function Fleche(x1:Number, y1:Number, x2:Number, y2:Number, effacer:Boolean, cancan:Graphics):void
    		{
    			var Norme:Number;
    			var cX:Number;
    			var cY:Number;
    			var Arrow:Array = new Array();
     
    			const ALength:Number = 10; //
    			const AWidth:Number = 7; //longueur et largeur de la pointe
     
    			Norme = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
     
    			if (Norme == 0)
    				return;
    			cX = (x2 - x1) / Norme;
    			cY = (y2 - y1) / Norme;
    			Arrow[0] = new Point(x2 - cX * ALength + cY * AWidth, y2 - cY * ALength - cX * AWidth);
    			Arrow[1] = new Point(x2 - cX * ALength - cY * AWidth, y2 - cY * ALength + cX * AWidth);
    			Arrow[2] = new Point(x2, y2);
     
    			with (cancan)
    			{
    				if (effacer)
    					clear();
    				beginFill(0);
    				lineStyle(1, 0);
    				moveTo(x1, y1);
    				lineTo(x2, y2);
    				for (var i:uint = 0; i < Arrow.length; i++)
    					lineTo(Arrow[i].x, Arrow[i].y);
    				endFill();
    			}
    		}


    ci-joint le résultat.

    Si tu as besoin d'explications, n'hésite pas.

  3. #3
    Futur Membre du Club
    Merci beaucoup mais j'ai très peu de connaissances en as2 et aucune en as3...
    J'ai tenté d'ouvrir ton swf mais j'ai le droit à une page blanche!

  4. #4
    Membre expérimenté
    Trace une flèche à la souris sur la page blanche...

    @+

  5. #5
    Membre expérimenté
    Après, ce n'est pas bien difficile de l'adapter en as2...
    graphics, c'est un canvas en as3. En as2, tu dessines directement sur un movieclip...
    la différence n'est pas énorme et tout à fait surmontable.

  6. #6
    Futur Membre du Club
    rien ne s'écrit sur ton swf. ou alors la flèche est en blanc?

  7. #7
    Membre expérimenté
    Tu te places sur la page, tu enfonces le bouton gauche de la souris, tu déplaces ta souris bouton gauche enfoncé et tu relâches.
    mouseDown,mouseMove et mouseUp...

  8. #8
    Futur Membre du Club
    Ouf, c'est bon ca fonctionne mais uniquement si j'ouvre sous mon navigateur. C'est super bien ce que tu me proposes!
    Je dois cependant faire une croix dessus. L'adaptation en as2 me semble insurmontable!

  9. #9
    Membre expérimenté
    En modifiant un peu, tu as la flèche ordinaire :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
     
    		private function Fleche(x1:Number, y1:Number, x2:Number, y2:Number, effacer:Boolean, cancan:Graphics):void
    		{
    			var Norme:Number;
    			var cX:Number;
    			var cY:Number;
    			var Arrow:Array = new Array();
     
    			const ALength:Number = 10; //
    			const AWidth:Number = 7; //longueur et largeur de la pointe
     
    			Norme = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
     
    			if (Norme == 0)
    				return;
    			cX = (x2 - x1) / Norme;
    			cY = (y2 - y1) / Norme;
    			Arrow[0] = new Point(x2 - cX * ALength + cY * AWidth, y2 - cY * ALength - cX * AWidth);
    			Arrow[1] = new Point(x2 - cX * ALength - cY * AWidth, y2 - cY * ALength + cX * AWidth);
     
    			with (cancan)
    			{
    				if (effacer)
    					clear();
    				lineStyle(1, 0);
    				moveTo(x1, y1);
    				lineTo(x2, y2);
    				lineTo(Arrow[0].x, Arrow[0].y);
    				moveTo(x2, y2);
    				lineTo(Arrow[1].x, Arrow[1].y);
    			}
    		}

  10. #10
    Futur Membre du Club
    Voici les messages d'erreur lorsque je dépose ce code:
    **Erreur** Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 1 : Attribut utilisé en dehors de la classe.
         private function Fleche(x1:Number, y1:Number, x2:Number, y2:Number, effacer:Boolean, cancan:Graphics)//:void
    
    **Erreur** Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 8 : Erreur de syntaxe.
         			const ALength:Number = 10; //
    
    **Erreur** Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 9 : Erreur de syntaxe.
         			const AWidth:Number = 7; //longueur et largeur de la pointe
    
    Total des erreurs ActionScript : 3 	 Erreurs signalées : 3
    Pour les deux dernières erreurs,rien de bien terrible, par contre la première, je ne comprends pas!

  11. #11
    Membre expérimenté
    déjà cancan:Graphics à remplacer par reference:MovieClip
    et with(reference) au lieu de with(cancan) après tu vois par toi-même.

  12. #12
    Futur Membre du Club
    Après avoir appliqué les modifications, l'erreur affichée reste exactement la même...

  13. #13
    Futur Membre du Club
    Désolé de revenir à la charge mais je ne parviens pas à traduire ce code en as2. peut-on me donner un coup de main?

  14. #14
    Futur Membre du Club
    il y a un truc que je ne comprends pas : comment les valeurs de x1 x2 y1 et y2 sont-elles renseignées?

  15. #15
    Membre expérimenté
    Ce sont tout simplement les coordonnées des deux extrémités de ta flèche...

    @+