2011-01-16 11 views
1

Ich habe in letzter Zeit ein paar Action-Scripts in die Hand genommen und mich dazu entschlossen, ein einfaches Pfeil-und-Bogen-Spiel zu machen. Bisher habe ich den Pfeil bogenförmig fliegen lassen. Als nächstes mache ich meinen Bogen und bin in der Lage, tatsächlich die Saite zu ziehen.Eine Bogensehne ziehen [Flash as3]

Bis jetzt dachte ich, ich würde den Bogen als MC zeichnen und eine Grafik verwenden, um die Zeichenfolge zu zeichnen. Ich bin an dem Punkt, an dem ich eigentlich die Saite ziehen sollte und ich habe keine Ahnung, wie ich von hier fortschreiten soll. Jeder Rat würde sehr geschätzt werden.

Wenn möglich, gib mir einfach einen Zeiger, ich möchte das Ding selbst codieren, ich frage nicht nach einem fertigen Ergebnis.

Code:

package { 

    import flash.display.MovieClip; 
    import flash.display.Shape; 
    import flash.display.Stage; 
    import flash.events.MouseEvent; 


    public class bow extends MovieClip { 
     var myStage:Stage; 
     var bowString:Shape; 
     var bowStringMc:MovieClip; 

     public function bow(stageRef) { 
      this.myStage = stageRef; 

      myStage.addChild(this); 
      this.x = myStage.stageWidth/2; 
      this.y = myStage.stageHeight/2; 

      this.drawBowstring(); 
     } 

     public function drawBowstring() { 
      bowString = new Shape(); 
      bowStringMc = new MovieClip(); 

      bowStringMc.addChild(bowString); 
      myStage.addChild(bowStringMc); 

      bowString.graphics.lineStyle(2, 0x000000); 
      bowString.graphics.curveTo(-50,this.height/2,0,(this.height-10)); 

      bowStringMc.x = this.x-1; 
      bowStringMc.y = this.y - this.height/2 + 5; 

      bowStringMc.addEventListener(MouseEvent.MOUSE_DOWN, pullBowstring); 
     } 

     public function pullBowstring(e:MouseEvent) { 
      // Have to start redrawing the graphic i gess but how? 
     } 
    } 

} 

aktualisieren

Thx vvMINOvv & Slomojo halfen beide Antworten Sie mir! Ich habe zZ 2 Zeilen, die Grafiken sind, die ich neu zeichne, wenn der Bogen zurück gezogen wird.

Wenn jemand anderes sehen will, wie ich es tat, here eine grobe snipped:

public function drawBowstring() { 
     bowStringTop = new Shape(); 
     bowStringBottom = new Shape(); 
     bowStringMc  = new MovieClip(); 

     bowStringMc.addChild(bowStringTop); 
     bowStringMc.addChild(bowStringBottom); 

     myStage.addChild(bowStringMc); 

     bowStringTop.graphics.lineStyle(2, 0x000000); 
     bowStringTop.graphics.moveTo(0, 0); 
     bowStringTop.graphics.lineTo(0, this.height/2); 

     bowStringBottom.graphics.lineStyle(2, 0x000000); 
     bowStringBottom.graphics.moveTo(0, this.height-10); 
     bowStringBottom.graphics.lineTo(0, this.height/2); 

     bowStringMc.x = this.x-1; 
     bowStringMc.y = this.y - this.height/2 + 5; 

     this.hand.addEventListener(MouseEvent.MOUSE_DOWN, pullBowstring); 
    } 

    public function pullBowstring(e:MouseEvent) { 
     myStage.addEventListener(MouseEvent.MOUSE_MOVE, reDrawBowstring); 
     myStage.addEventListener(MouseEvent.MOUSE_UP, releaseBowstring); 
    } 

    public function releaseBowstring(e:MouseEvent) { 
     myStage.removeEventListener(MouseEvent.MOUSE_MOVE, reDrawBowstring); 
     myStage.removeEventListener(MouseEvent.MOUSE_UP, releaseBowstring); 
    } 

    public function reDrawBowstring(e:MouseEvent) { 
     if (this.hand.x < -18 || this.hand.x > 0) { 
      this.releaseBowstring(e); 
     } 
     this.hand.x = mouseX; 
     this.arrow.x = mouseX; 

     bowStringTop.graphics.clear(); 
     bowStringBottom.graphics.clear(); 

     bowStringTop.graphics.lineStyle(2, 0x000000); 
     bowStringTop.graphics.moveTo(0, 0); 
     bowStringTop.graphics.lineTo(this.hand.x, (this.height/2)-5); 

     bowStringBottom.graphics.lineStyle(2, 0x000000); 
     bowStringBottom.graphics.moveTo(0, this.height-10); 
     bowStringBottom.graphics.lineTo(this.hand.x, (this.height/2)-5); 
    } 

Antwort

1

Sie können die Zeichenklasse in Flash verwenden. Ein schnelles Beispiel würde vielleicht so aussehen.

myString.graphics.clear(); 
myString.graphics.lineStyle(1); 
myString.graphics.moveTo(bowTopX,bowTopY); 
myString.graphics.curveTo(mouseX,mouseY,bowBottomX,bowBottomY); 

Dies würde eine Linie von der Spitze des Bogens, auf den Boden, und die Kurve in Richtung ziehen, wo Sie mit der Maus ist. Sie könnten diesen Code in einer Funktion ausführen lassen, die jedes Mal aufgerufen wird, wenn Flash die Anzeige oder etwas aktualisiert oder wenn die Maus bewegt wird. Was die clear() erlaubt ist was Sie zu tun klar, dass spezifische Form es und neu zu zeichnen, die, wenn sie bei einem schnell genug Intervall wie seine

Hoffentlich animiert werden aussehen wird getan, das gibt Ihnen ein wenig Perspektive auf das, was

möglich ist
+0

Thx, ich werde es versuchen. Ich denke das würde mein Problem lösen :) – Michael

1

Das Beste, was in diesem Stadium ist, genau zu definieren, wie Sie mit dem Bogen zu interagieren möchten.

Je nach Rendering-Maßstab müssen Sie nur die Bogenzeichenfolge zeichnen, sodass sie dem Mauszeiger auf mousedown folgt, jedoch auf Ihre bevorzugten Grenzen beschränkt ist.

Beim Zurückziehen ziehen Sie am besten die Saite als zwei Linien von jedem Ende des Bogens zur eingeschränkten Mausposition.

Wenn Sie den Bogen loslassen, möchten Sie wahrscheinlich die Saite als einzelne Kurve an einem bestimmten Punkt zeichnen (wahrscheinlich, wenn die Bogensaite den flachen Punkt erreicht), so dass Sie die elastische Bühne des Bogens zeichnen können Saitenbewegung. (wie es zur Ruhe kommt.)

Hoffentlich sind Sie vertraut mit Tweening-Motoren, wenn nicht, schauen Sie sich etwas wie Desuades Motion Package oder Twensy. (Sie finden sie unter http://fluxdb.fluxusproject.org)

+0

Gut Idee, es ist mir auch in den Sinn gekommen, zwei Linien zu machen, die aus der Mitte gezogen werden. Ich weiß nicht, wie ich die Animation programmieren soll ... noch;) – Michael