所以我創造了一個有趣的小項目昨晚涉及創建大量的小圓圈(星)。所以爲了代表這顆明星,我創建了一個明星班。這是最相關的方法影片剪輯去除AS3
public class Star extends MovieClip
{
public function Star(r:Number)
{
starRadius = r;
this.animated = false;
this.graphics.beginFill(0xFFFFFF);
this.graphics.drawCircle(0,0,starRadius);
this.graphics.endFill();
this.addEventListener(Event.REMOVED, onRemoval);
}
public function animate():void
{
if(isNull(angle)|| isNull(speed)){
throw new Error("Angle or speed is NaN. Failed to animate");
}
if(animated){
throw new Error("Star already animated");
}
if(this.parent == null){
throw new Error("Star has not been added to stage yet");
}
this.addEventListener(Event.ENTER_FRAME, doAnimate, false, 0);
animated = true;
}
private function doAnimate(e:Event):void{
if(isNull(cachedDirectionalSpeedX) || isNull(cachedDirectionalSpeedY)){
cachedDirectionalSpeedY = -speed * Math.sin(angle);
cachedDirectionalSpeedX = speed * Math.cos(angle);
}
this.x += cachedDirectionalSpeedX;
this.y += cachedDirectionalSpeedY;
if(this.x > this.parent.stage.stageWidth || this.y > this.parent.stage.stageHeight){
this.dispatchEvent(new Event("RemoveStar",true));
this.removeEventListener(Event.ENTER_FRAME, doAnimate);
}
}
爲了給你什麼它做了總結,基本上就初始化它增加了對自身的監聽器,基本上是空值每個實例varialbles。當animate()被調用時,它會向本身添加一個偵聽器,並將其動畫到某個方向。這個聽衆還檢查它的位置是否已經在舞臺之外,並且在它已經到達時停止它的移動。另外,它會派發一個事件,以便父母知道何時刪除它。
因此,在「主」類,我有
this.addEventListener("RemoveStar", removeStar);
和
private function removeStar(e:Event):void
{
starCount--;
this.removeChild(Star(e.target));
}
我還有一個聽衆,基本上打印出數兒,它有每次,但我不是要去把代碼放在這裏。我遇到的問題是......看起來像刪除星星的聽衆不能「一直」工作。當創建1000個明星在啓動時,沒有別的,兒童人數下降在開始的時候,它被卡在一定數量這使我覺得有一些影片剪輯不會移除。有人知道這裏發生了什麼嗎?
你能向我們展示完整的代碼?有不同的東西丟失:所有的類屬性,以及一些類的方法,如ISNULL()或onRemoval() – pkyeck
哪裏'onRemoval()'函數,想必應該去掉所有的內部引用? – shanethehat