2016-04-14 37 views
1

Film Klibi çerçeveye girdiğinde kuyruğunda rastgele uzunlukta bir çizgi çizmem gereken bir Circle() sınıfım var. daire ve çizgi removeEventListener olarak etrafında ayrı oturtma tutmak AncakEvent.ENTER_FRAME kullanırken TweenMax'i removeEventListener ile nasıl durdurulur?

circle + line

çalışmaz: Beklendiği gibi bu gibi görünmelidir. Film Klibini yalnızca bir kez çizmeyi nasıl durdurabilirim? Lütfen yardım et!!! çerçevede

package { 
    import com.greensock.*; 
    import flash.display.MovieClip; 
    import flash.display.Shape; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class Circle extends MovieClip { 

     var _line: Shape = new Shape(); 

     public function Circle() { 
      addEventListener(Event.ENTER_FRAME, animate); 
     } 

     function animate(e: Event): void { 
      _line.graphics.clear(); 
      _line.graphics.lineStyle(2, 0x00AEEF); 
      _line.graphics.moveTo(this.circle.x, this.circle.y); 
      addChild(_line); 

      TweenMax.to(this.circle, randomNumber(0.5, 2), { 
       x: randomNumber(100, 500), 
       onUpdate: updateHandler 
      }); 
     } 

     function updateHandler(): void { 
      _line.graphics.lineTo(this.circle.x, this.circle.y); 
      _line.graphics.moveTo(this.circle.x, this.circle.y); 
      removeEventListener(Event.ENTER_FRAME, updateHandler); 
     } 

     function randomNumber(low: Number = NaN, high: Number = NaN): Number { 
      var low: Number = low; 
      var high: Number = high; 
      if (isNaN(low)) { 
       throw new Error("no low number"); 
      } 
      if (isNaN(high)) { 
       throw new Error("no high number"); 
      } 
      return Math.round(Math.random() * (high - low)) + low; 
     } 
    } 
} 

, ben:

var mc: Circle = new Circle(); 
mc.x = 50; 
mc.y = 50; 
addChild(mc); 
+1

'updateHandler' olay dinleyicisi için Handler değil deneyin Olabilir. 'canlandırma (e: Etkinlik) 'sizin işleyicinizdir. İlk etapta bulunmayan bir EventListener'ı kaldırmaya çalışıyorsunuz. – DodgerThud

+1

Ayrıca burada bir olay çerçevesi gerektiğini sanmıyorum, updatehandler sizin için bu görevi yerine getirecektir. –

+0

Çok teşekkürler! 'AddEventListener (Event.ENTER_FRAME, animate)' yerine 'animate(); 'yapıcıyı çağırdım. Burada olduğu gibi, @DodgerThud, dinleyicide ('updateHandler' değil) 'animate' öğesini kaldırarak da çalışır. Her iki şekilde de, bir çekicilik gibi çalışır! – Rock

cevap

2

bu

function Circle() { 
    _line.graphics.lineStyle(2, 0x00AEEF); 
    _line.graphics.moveTo(circle.x, circle.y); 
    addChild(_line) 
    TweenMax.to(this.circle, randomNumber(0.5, 2), { 
     x: randomNumber(100, 500), 
     onUpdate: updateHandler 
    }); 

} 
function updateHandler(): void { 
    _line.graphics.lineTo(this.circle.x, this.circle.y); 
    _line.graphics.moveTo(this.circle.x, this.circle.y); 
} 
İlgili konular