2013-12-17 20 views
0

我最近開始用as3編程,最近我開始學習面向對象的編程。我的問題是訪問一個班級內的功能。我猜「主」代碼不適合這樣做,但我幾乎只是要求爲代碼的每個部分提供建議。訪問動作類中的定時器

主要代碼:

import flash.utils.Timer; 
import flash.events.TimerEvent; 

stage.addEventListener(MouseEvent.CLICK, makeCircle); 
function makeCircle(event:MouseEvent):void 
{ 
    var s = new Circle(); 
    addChild(s); 

    s.x = mouseX; 
    s.y = mouseY; 
} 

類代碼(連接到MovieClip圓圈的MovieClip填補內線):

package 
{ 

    import flash.display.MovieClip; 
    import flash.utils.Timer; 
    import flash.events.TimerEvent; 
    import flash.filters.BlurFilter; 
    import flash.geom.ColorTransform; 

    public class Circle extends MovieClip 
    { 

     private var t:Timer = new Timer(30,1000); 
     var time:Number = 0; 
     var size:Number; 
     var bf = new BlurFilter(); 
     var ct:ColorTransform = new ColorTransform(); 

     public function Circle() 
     { 

      // constructor code 
      t.addEventListener(TimerEvent.TIMER, updateCircle); 
      t.start(); 
      ct.color = 0xffffff * Math.random(); 
      fill.transform.colorTransform = ct; 

      fill.blendMode = "hardlight"; 

     } 

     public function updateCircle(event:TimerEvent):void 
     { 

      time = t.currentCount/10; 
      size = Math.pow(Math.E, - time) * Math.sin(5 * time) * (Math.log(time)); 
      width = (size * 20 + 100 - time * 5) * 2; 
      height = (size * 20 + 100 - time * 5) * 2; 
      bf.blurX = time; 
      bf.blurY = time; 

      filters = [bf]; 
      alpha = 1 - time/20; 

     } 

    } 

} 

我想要做的是去除S的孩子(主代碼)當t.currentCount(類代碼)是一個設置值(當alpha值爲0時)。

在此先感謝。

回答

0

你想要做的是創建一個甚至在定時器完成時觸發的Circle類(alpha == 0)。自定義事件將不得不在你的主類中被捕獲。

爲了把自定義事件監聽器在主類中寫:

s.addEventListener("RemoveChild", removeChild) 

添加處理函數

function removeChild(e:Event) 
{ 
    removeChild(s); 
} 

在圈中的類時要觸發它,你可以添加事件:

this.dispatchEvent(new Event("RemoveChild"); 

或者,您可以通過將您的主類中的Alpha值在那裏呼叫removeChild(s);直。

讓您的自定義事件工作的一種簡單方法是使用AS3Signals框架。

希望可以幫到