2017-01-12 3 views
0

Ich verwende ein Array, um in Aktionsskript 3 eine expandierende Kreisanimation zu erstellen. Zeichnen eines neuen Kreiselements und Löschen des vorherigen Kreises, alles von einem Zeitgeber geführt. Der Code zeichnet derzeit das neue Kreiselement, aber nicht das vorherige. Die Ausgabe ist derzeit eine Gruppe von 30 Kreisen. Bitte helfen Sie.Expandierende Kreisanimation in AS3

Das Folgende ist die Klasse für das Erstellen von Kreisen:

package 
{ 
    import flash.display.Sprite; 
    import flash.utils.Timer; 
    import flash.events.TimerEvent; 
    import flash.display.Shape; 

    public class SoundWave2 extends Sprite 
    { 
     public function SoundWave2() 
      { 
       var wavearray:Array = new Array(); 
       var waveTimer:Timer = new Timer(1000, 30); 
       var i:int = new int(0); 
       waveTimer.addEventListener(TimerEvent.TIMER, init); 
       waveTimer.start(); 

       function init():void 
          { 
           if (i == 0) 
            { 
             wavearray[i] = graphics.lineStyle(1, 0x0000FF); 
             wavearray[i] = graphics.drawCircle(0, 0, 30); 
             i += 1; 
             trace(i); 
            } 

            else 
            { 
             wavearray[i] = graphics.lineStyle(1, 0x0000FF); 
             wavearray[i] = graphics.drawCircle(0, 0, 30 + i); 
             wavearray.removeAt(i-1); 
             i += 1; 
             trace(i); 
            } 

          } 



     } 
    } 
} 
+0

Bitte bearbeiten Sie Ihre Frage, um Ihren Code als Text anstelle von einem Bild anzuzeigen. –

+0

Rufen Sie graphics.clear() vor dem Zeichnen des neuen Kreises –

Antwort

1
waveArray.removeAt... 

dass es aus dem Array nicht entfernt werden kann oder aber von der Stufe des Verwendens

Stattdessen nicht entfernt ein Array von Kreisen, benutze einfach den gleichen Kreis und zeichne es neu, wobei du sicher bist, dass du die Clear-Funktion als erstes anrufst.

myCircle.graphics.clear(); 
myCircle.graphics.beginFill... 
...drawCircle(...); 

Das ist nur ein Pseudo-Code, aber Sie bekommen die Idee.

bearbeiten

Wie Sie für weitere Informationen über die Beseitigung aller Array-Elemente von der Bühne gestellt:

private function destroyArray(arr:Array):void{ 
    for (var i:int = 0; i < arr.length; i++){ 
     arr[i].parent.removeChild[arr[i]]; 
    } 
} 

Dann für jedes Array, das Sie auf der Bühne ausziehen wollen, tun

destroyArray(yourArray); 

aber verwenden Sie Ihr gewünschtes Array anstelle von "yourArray", offensichtlich.

+0

Dies funktioniert! Kannst du dir einen Weg vorstellen, um Array-Elemente von der Bühne zu holen? –

+0

@RobbyNair, Wenn diese Antwort ** funktioniert **, dann markieren Sie sie als Lösung mit dem Symbol "✓" –