iT邦幫忙

0

AS3.0 無法正確地刪除播放完的Child

Ash 2023-09-17 14:34:501071 瀏覽
  • 分享至 

  • xImage

近期才努力學習AS3.0,有些語法不是很熟悉與了解,再請大神幫幫忙~QQ

"在場景裡面隨機創建star,並監聽每個star是否播放完畢,播放完畢的star在場景中刪除"

import flash.display.MovieClip;
import flash.events.Event;

// 創建名為 "star" 的容器 MovieClip
var starContainer:MovieClip = new MovieClip();
addChild(starContainer);

// 添加進入幀事件的監聽器
starContainer.addEventListener(Event.ENTER_FRAME, generateStars);

function generateStars(event:Event):void {
    // 創建星星
    var star:MovieClip = new STAR();
    star.x = Math.random() * stage.stageWidth;
    star.y = Math.random() * stage.stageHeight;
    star.scaleX = star.scaleY = 0.3 + 0.2 * Math.random();
    star.alpha = 1 + 0.3 * Math.random();

    starContainer.addChild(star);

    // 監聽星星的完成事件
    star.addEventListener(Event.COMPLETE, onStarComplete);

    // 檢查是否播放完畢
    if (star.currentFrame == star.totalFrames) {
		trace(star.currentFrame);
        // 如果已經播放完畢,手動觸發完成事件
        onStarComplete(new Event(Event.COMPLETE));
    }
}

function onStarComplete(event:Event):void {
    var completedStar:MovieClip = event.target as MovieClip;
    trace(event.target);
    // 解除事件監聽器
    completedStar.removeEventListener(Event.COMPLETE, onStarComplete);
    
    // 從容器中刪除已完成的星星
    if (completedStar.parent) {
        completedStar.parent.removeChild(completedStar);
    }
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
海綿寶寶
iT邦大神 1 級 ‧ 2023-09-17 19:58:25

...AS在這裡算是比較冷門的語言
要想得到解答得碰運氣

以下是Google到類似的做法
提供參考

var starsArray:Array = new Array();
var maxStarss:Number = 8;

function addStars(e:Event)
{
Stars: var = new stars Stars();
Stars.x = stage.stageWidth/2;
Stars.y = stage.stageHeight/2;
Stars.Alpha = Math.Random () *.8 +. 2;
stars.scaleX = stars.scaleY = Math.Random () *.8 +. 2;
stars.xMovement = Math.Random () * 10 - 5;
stars.yMovement = Math.Random () * 10 - 5;
starsArray.push (stars);
addChild (stars);

stars.cacheAsBitmap = true;

If (starsArray.length > = maxStarss)
{
removeChild (starsArray.shift ());
}
stars.addEventListener (Event.ENTER_FRAME, moveStars);
}

function moveStars(e:Event)
{
e.currentTarget.x += e.currentTarget.xMovement;
e.currentTarget.y += e.currentTarget.yMovement;
}

var myTimer:Timer = new Timer (50);
myTimer.addEventListener (TimerEvent.TIMER, addStars);
myTimer.start ();
Ash iT邦新手 5 級 ‧ 2023-09-19 20:14:05 檢舉

好~~謝謝您~這個陣列寫法我要再研究一下!!

0
milkmidi
iT邦見習生 ‧ 2023-09-17 23:36:13

語法看起來是對的,看能不能提供原始碼

2
angelliya00
iT邦新手 4 級 ‧ 2023-09-17 23:55:31

Event.COMPLETE 不會從 MovieClip 主動 dispatchEvent

以往執行專案時會在 MovieClip 最後一格發送這個事件給外部收,
或者是透過 currentFrame === totalFrames 來做什麼事情

在 STAR 的最後一格加入一個關鍵影格,裡面加上
dispatchEvent(new Event(Event.COMPLETE));
就可以了

Ash iT邦新手 5 級 ‧ 2023-09-19 20:13:41 檢舉

好的!! 謝謝您~我試試看唷!

Ash iT邦新手 5 級 ‧ 2023-09-21 20:49:22 檢舉

謝謝您! angelliya00 果然大師出手就不一樣,我的程式碼也有一些問題,修改過後,達成我要的效果! 謝謝您😁

我要發表回答

立即登入回答