沒錯~聖誕夜在家寫部落格
整個就是宅到底阿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……






不知道有沒有什麼方便的作法
可以讓 removeChild 的元件(含影音的)
乖乖閉嘴……….
例如,載入一個 swf 內容是 TVC,
使用這還沒看完就換單元的話,
會發現,TVC的聲音還在繼續播……
目前我知道的方法只有,
移除前,先把它stop()下來,
不像as2,移除就了事了。
帥啊,之前也被這個問題困擾到,原來解法是這樣,感謝!
呵呵~
很實用的一段code啦^^
趕快收藏起來~ㄎㄎ
http://www.walkone.com.tw/blog/?user_id=justdoit&subject_id=6522
這個人是幫你備份嗎?
XD