經過查詢了資料發現了刪除容器的所有子物件也有這樣的學問啊。原來是關於深度的問題,每刪除乙個子物件
,深度就會自動移動並填充這個空位。
每個displayobjectcontainer物件都有乙個numchildren屬性,numchildren記錄了這個物件裡子物件的個數,當
容器物件裡新增了乙個子物件,位置為0,numchildren為1,新增第二個子物件時,位置為1,numchildren為2,
以此類推。
要刪除容器物件裡的子物件,可以用removechild(parm1)和removechildat(parm2),其中parm1表示的是乙個
顯示物件的引用,parm2則是顯示物件的位置,可以理解為層次(相當於as2中的層的概念吧)。用上面兩種方法
還沒有達到真正刪除子物件的目的,它們只是讓顯示物件不在顯示列表裡,要從記憶體中刪除還需將子物件的引用
設為null。
當乙個子物件被移除,比它高位置的子物件就自動下移一位。如某容器裡有3個子物件,它們在0,1和2位置
,當0位置的子物件被移除,則其他位置的子物件的位置自動減1,所以要刪除容器裡所有子物件可以有兩種方法
: 1 總是移除位置0處的物件
2 移除最上面的物件;
具體演算法如下:
public function removeallchildren(container:displayobjectcontainer):void
或:
var len:uint = con.numchildren;
while(len>0)
由於顯示列表會自動移動顯示物件填充空缺,所以只移除0索引的位置即可。這樣效率最高。到這兒,大家可能會發現,雖然numchildren已經為0,但是graphics繪製的圓形仍然存在。所以最後,應當呼叫
一句下面的**把它也清除掉,才算真正的移除了容器下所有的顯示內容。
con.graphics.clear();
總結:這裡我只是作為對比:兩篇博文都說種了乙個特點,就是關於刪除容器的所有子物件
這裡的應用可以是當我們做遊戲的時候,複製了很多影片剪輯。那麼在遊戲結束的時候
為了能夠刪除所有子物件釋放記憶體,那麼我們可以使用到removeallchildren()這個
自定義的函式刪除我們所有的物件。
像:這裡我做的磚塊,我複製了18x6個物件。但我希望用一種方法刪除我所有的物件
那麼呼叫的方法就是我們自定義的方法removeallchildren();
引數填寫為:
removeallchildren(brick.parent);
也就是物件的父級別,包含了他的的容器
好,這個對比已經很清楚了。在遊戲設計中,經常要使用到這個手段。
好,筆記記錄完畢!時間是15:26分2023年7月10日
public function init():void
}
AS3 0物件複製
一 拷貝的分類 有兩種,一種是淺拷貝,還有就是深拷貝。淺拷貝拷貝只是引用,會影響被拷貝的資料。例如陣列的 slice方法返回的是乙個陣列的淺拷貝,通過改變陣列中的東西會改變原被拷貝資料。深拷貝複製的源物件的二進位制資料,所以不會影響到原資料的屬性和方法。物件轉殖可以複製出乙個和已存在物件相同的物件,...
flash指令碼AS3 0載入網路物件
import flash.display.loader import flash.net.urlrequest var loader loader new loader var req urlrequest new urlrequest loader.x 2 loader.y 2 this.addc...
操作AS3 0中的timmer 物件
在這裡我只想談一下時間間隔函式的變化,在as2中有兩個時間間隔函式,我們最常用的可能就是setinterval 另外還有是settimeout 但在as3中,多了乙個timer類,也是用來進行間隔時間呼叫函式的。與前兩者不同的是,這個函式有一些屬性和方法,可以控制呼叫過程。具體的講,有四個屬性和三個...