[AS3]-藉由元件的實體名稱移除場景上的元件

沒錯~聖誕夜在家寫部落格
整個就是宅到底阿XD
因為前陣子真的是忙翻了
現在真的只想多點休息時間啦
今天這篇文章的標題應該很多人都是有看沒有懂啦
連我自己都看不懂~哈哈
不過這段程式片段確實很實用
用AS3處理元件的移除時百分百一定會遇到的啦
所以囉~太重要了~就先把它記錄下來啦~~~
順便跟大家share一下
往下直接看code吧!!!


首先就先在場景上隨便繪製建立一個元件實體
做為待回
要進行移除的目標元件
這段程式隨便看看就好~不重要~
除了第三行要注意一下
主要是給這個新建立的元件一個name
等一下要移除就是用這個名稱來辨識

1 //在場景上繪製一個圓形的元件
2 var circleSp:Sprite = new Sprite();
3 circleSp.name = “circleSprite";
4 circleSp.graphics.beginFill(0x99CC33);
5 circleSp.graphics.drawCircle(0, 0, 50);
6 circleSp.graphics.endFill();
7 addChild(circleSp);
8 circleSp.x =100;
9 circleSp.y = 100;

接著再建立一個按鈕實體
等一下用來觸發移除元件動作的事件
這段程式也不重要啦

1 //在場景上建立按鈕元件
2 var removeBtn:Button = new Button();
3 removeBtn.label = “Remove Circle";
4 removeBtn.x = 50;
5 removeBtn.y = 170;
6 removeBtn.addEventListener(MouseEvent.CLICK, onClick);
7 addChild(removeBtn);

再來當然是事件處理的函式囉
這個事件處理會去call另一個自訂函式
將實體名稱為"circleSprite"的這個元件從this上移除掉

1 //按鈕事件處理函式
2 function onClick(evt:MouseEvent) {
3       removeChildWithRef(“circleSprite", this);
4 }

最後就是重頭戲登場啦
負責將實體名稱字串轉換成display object
然後進行移除動作的自訂函式
這個函式的第一個參數是丟元件實體名稱字串
第二個參數是丟父層,看他的爸爸是誰就把它丟進去
自己生的孩子總要負責吧~呵呵
第三行的程式主要就是從父層中去尋找出名字相符的子元件
然後把它轉換成display object

1 //負責移除元件的函式
2 function removeChildWithRef(spName:String, parentObj:*) {
3 var do: DisplayObject = parentObj.getChildByName(spName);
4 parentObj.removeChild(do);
5 }

這樣就大功告成啦

前陣子我在開發公司的一個案子時
就有遇到這個問題
那時候只大概知道要新增元件就addChild
要移除元件就removeChild
也沒有特別在去研究深入一點
因為案子時程不等人阿~ㄎㄎ
於是就先使用了其他方式解決
後來才發現這個正統的處理方式啦~ㄎㄎ
這個可以說是AS3滿基本的元件處理程式觀念
如果你在寫AS3也有遇過類似的問題
就趕快把它學起來吧^^
只能說AS3真的是博大精深
要學的東西還很多啦
大家有什麼問題就提出來切磋交流啦^^
睡覺去囉Zzzzz……

標籤:,

4 responses to “[AS3]-藉由元件的實體名稱移除場景上的元件”

  1. 耶書 says :

    不知道有沒有什麼方便的作法
    可以讓 removeChild 的元件(含影音的)
    乖乖閉嘴……….

    例如,載入一個 swf 內容是 TVC,
    使用這還沒看完就換單元的話,
    會發現,TVC的聲音還在繼續播……

    目前我知道的方法只有,
    移除前,先把它stop()下來,
    不像as2,移除就了事了。

  2. joehwang says :

    帥啊,之前也被這個問題困擾到,原來解法是這樣,感謝!

  3. mitchbox says :

    呵呵~
    很實用的一段code啦^^
    趕快收藏起來~ㄎㄎ

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: