2011-10-26 2 views
3

J'essaye de créer une application Flash qui permettra à un utilisateur de dessiner des flèches sur l'écran/toile en utilisant la souris. Donc, si elles cliquent et maintiennent le bouton gauche de la souris aux coordonnées 23,12 et relâchent le bouton gauche à 84,45 une ligne serait tracée entre les 2 points avec une tête de flèche à la deuxième coordonnée.Besoin d'être en mesure de dessiner des flèches avec la souris et être en mesure de le sélectionner

J'ai également besoin que chaque flèche individuelle soit sélectionnable pour pouvoir être déplacée ou supprimée (je sais comment faire cette partie!).

Si quelqu'un pouvait m'aider et me diriger dans la bonne direction (comme un exemple ou un tutoriel), il serait grandement apprécié!

Répondre

3

Puisqu'il est votre première question:

enter image description here

package 
{ 
    import flash.display.CapsStyle; 
    import flash.display.Graphics; 
    import flash.display.JointStyle; 
    import flash.display.LineScaleMode; 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.geom.Point; 

    [SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0xefefef, frameRate = 30)] 
    public class Arrows extends Sprite 
    { 

     public var arrows:Vector.<Sprite> = new Vector.<Sprite>(); 

     public var canvas:Sprite; 

     public var lineColor:uint = Math.random() * 0xffffff; 

     public var lineWeight:Number = 5; 

     private var startPoint:Point; 


     public function Arrows() 
     { 
      super(); 

      addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
     } 

     protected function addedToStageHandler(event:Event):void 
     { 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.align = StageAlign.TOP_LEFT; 

      addCanvas(); 
     } 

     protected function addCanvas():void 
     { 
      canvas = new Sprite(); 
      addChild(canvas); 

      lineColor = Math.random() * 0xffffff; 

      // give alpha for interaction 
      var g:Graphics = canvas.graphics; 
      g.beginFill(0x0, 0.0); 
      g.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
      g.endFill(); 

      // listen for mouse down 
      canvas.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
     } 

     protected function mouseDownHandler(event:MouseEvent):void 
     { 
      canvas.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 

      // mark start point 
      startPoint = new Point(event.localX, event.localY); 

      // start rendering 
      canvas.addEventListener(Event.ENTER_FRAME, enterFrameHandler); 

      // listen for mouse up/out to end arrow 
      canvas.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
      canvas.addEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler); 
     } 

     protected function enterFrameHandler(event:Event):void 
     { 
      var angle:Number = polarAngle(new Point(mouseX, mouseY), new Point(startPoint.x, startPoint.y)); 

      // draw line 
      var g:Graphics = canvas.graphics; 
      g.clear(); 

      // give alpha for interaction 
      g.beginFill(0x0, 0.0); 
      g.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
      g.endFill(); 

      g.lineStyle(lineWeight, lineColor, 1, true, LineScaleMode.NORMAL, CapsStyle.SQUARE, JointStyle.MITER); 
      g.moveTo(startPoint.x, startPoint.y); 
      g.lineTo(mouseX, mouseY); 

      // draw arrow head 
      g.moveTo(mouseX - (20 * Math.cos((angle - 45) * Math.PI/180)), 
        mouseY - (20 * Math.sin((angle - 45) * Math.PI/180))); 

      g.lineTo(mouseX + (5 * Math.cos((angle) * Math.PI/180)), 
        mouseY + (5 * Math.sin((angle) * Math.PI/180))); 

      g.lineTo(mouseX - (20 * Math.cos((angle + 45) * Math.PI/180)), 
        mouseY - (20 * Math.sin((angle + 45) * Math.PI/180))); 
     } 

     protected function polarAngle(point:Point, center:Point=null):Number 
     { 
      if (!center) 
       center = new Point(0, 0); 

      return Math.atan2(point.y - center.y, point.x - center.x) * 180/Math.PI; 
     } 

     protected function mouseUpHandler(event:MouseEvent):void 
     { 
      canvas.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
      canvas.removeEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler); 

      // stop rendering 
      canvas.removeEventListener(Event.ENTER_FRAME, enterFrameHandler); 

      // push canvas to arrows collection 
      arrows.push(canvas); 

      // add a fresh canvas 
      addCanvas(); 
     } 

    } 
} 

Vous dites que vous savez comment les déplacer, donc je vais laisser ça à vous.

+1

Bonjour - merci pour le code! Je suis TRÈS nouveau pour Flash et AS3, mais on m'a donné ce projet au travail. Je l'ai dans mon projet Flash et je peux cater l'objet comme ça (donc je sais que c'est accessible): var a: Flèches = new Arrows(); mais je ne sais pas quoi faire ensuite ... Je me sens comme un crétin en ce moment, mais je suis dans un délai serré. Désolé d'être un débutant! – Nutkraker

+1

J'ai ajouté votre code dans un fichier appelé Arrows.as et j'ai ajouté cette ligne dans mon fichier fla (les deux fichiers sont dans le même répertoire): var a: Arrows = new Arrows(); – Nutkraker

+1

Nevermind! Je ne l'ai pas ajouté à la scène: addChild (a); Merci pour votre réponse - vous m'avez sauvé une tonne de temps !!! – Nutkraker

Questions connexes