2016-10-21 1 views
1

Ich habe ein MOUSE_MOVE MouseEvent und einen Code zum Zeichnen von Kreisen erstellt, während ich den Mauszeiger bewege. Das Problem ist, dass es nicht jeden einzelnen Kreis herauszieht, wenn ich die Maus zu schnell bewege. After I move the mouse cursor in a line with moderate speedCursorbewegung zu schnell, um den Code zu lesen

Hier sind die Codes, die ich für das Ereignis MOUSE_MOVE habe.

stage.addEventListener(MouseEvent.MOUSE_MOVE, mCursor); 

public function mCursor(e:MouseEvent):void 
{ 

    var cursor:Shape = new Shape(); 

    cursor.graphics.beginFill(1, 1); 
    cursor.graphics.drawCircle(e.stageX, e.stageY, 10); 
    cursor.graphics.endFill(); 
    addChild(cursor); 
} 

Gäbe es eine arithmetische Gleichung oder Physik Formel es so jeden einzelnen Kreis hinzufügen zu haben, dass sie eine gerade Linie, ohne die Leerstellen dazwischen ziehen kann?

+0

Verwenden Sie Pixel (Bitmap-Daten) nicht Shape beim Erstellen einer Zeichnung App. All diese 'addChild (cursor);' könnten das System verlangsamen, wenn Sie zu viele Speicher hinzufügen. –

+0

Gibt es ein Tutorial zur Verwendung von Bitmap-Daten? Ich bin nicht so vertraut mit ihm als Shape ist grundlegend zu verstehen – Zulu

+0

Es gibt viele Tutorials da draußen. Ihr Problem ist derzeit 'Cursor' ist eine Variable. Jede hinzugefügte Form erstellt mehrere ** Variablen ** im System. Erstellen Sie ein einzelnes leeres Bitmap mit einer bestimmten Breite und Höhe und verwenden Sie dann setpixel (das nur die Farben an bestimmten Koordinaten im Canvas ändert), die Sie nicht ständig hinzufügen, sondern einfach einen festgelegten Betrag bearbeiten. Wenn Sie diese bestimmte Kreisform/-größe benötigen, dann "zeichnen" Sie sie zunächst als "cursor_BMP", dann "rubbern" Sie diese Pixel um Ihren 'canvas_BMP'. –

Antwort

2

verwenden Gerade

cursor.graphics.lineTo(…); 

um anstelle der Zugabe diskrete einzelne Kreise eine kontinuierliche Linie zwischen den Punkten zu ziehen.

gelöscht ich die oben genannten Codes und nur diese eine Zeile Code cursor.graphics.lineTo(e.localX, e.localY); ich es getestet hinzugefügt und es gab Rohlinge zwischen

Sie haben die Leitung durch den Aufruf lineStyle() Methode des graphics ersten Schränkungsweite Objekt. Andernfalls ist die Linienbreite Null (der Standardwert).

Hier ist ein voll funktionsDokumentKlasse:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Shape; 

    import flash.events.MouseEvent; 

    public class Main extends Sprite 
    { 
     private var cursor:Shape; 

     public function Main() 
     { 
      cursor = new Shape(); 
      cursor.graphics.lineStyle(2); 
      addChild(cursor);    

      stage.addEventListener(MouseEvent.MOUSE_MOVE, mCursor); 
     } 

     private function mCursor(e:MouseEvent):void 
     { 
      cursor.graphics.lineTo(e.stageX, e.stageY); 
     }  
    } 
} 

Sie müssen wahrscheinlich mit moveTo um herumzudaddeln eine geeignete Startposition einzustellen. Wie der Code jetzt ist, beginnt es bei 0/0.

+0

Ich habe versucht, mit diesem Code, aber das Ergebnis war immer noch das gleiche, ich habe Leerzeichen zwischen der Linie, die ich zeichnete – Zulu

+0

@Zulu wie genau hast du das getan? Fühlen Sie sich frei, Ihren Code zu Ihrer Frage hinzuzufügen. Für die Linie sollten Sie nur ein Cursor-Objekt verwenden. – null

+0

Ich löschte die obigen Codes und fügte nur diese eine Codezeile hinzu mouseClick.graphics.lineTo (e.localX, e.localY); Ich testete es und es gab Leerzeichen zwischen – Zulu

Verwandte Themen