台灣最大程式設計社群網站
線上人數
1441
 
會員總數:246274
討論主題:189809
歡迎您免費加入會員
討論區列表 >> CSS/HTML5/Bootstarp >> 大大們,請問這題遍歷所有子顯示對像~~
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
大大們,請問這題遍歷所有子顯示對像~~
價值 : 50 QP  點閱數:1018 回應數:4
樓主

遠仔
門外漢
0 82
1372 260
發送站內信


1.請問for(var i:uint=0; i < container.numChildren; i++)為何不能用 for (var i:uint=0; i < this.numChildren; i++)呢?
用this.numChildren跑出來的結果挺怪的

2.這CODE是指,如果i為顯示物件容器,則再針對這些物件容器再找一次子顯示物件麼?這樣好像才能全部都找出來??

大大們,麻煩~~^^"

本篇文章發表於2012-08-09 00:04
1樓
回應

香帥
檢舉此回應
請問for(var i:uint=0; i < container.numChildren; i++)為何不能用 for (var i:uint=0; i < this.numChildren; i++)呢?
當然要配合function參數才有意義
他的function
public function traverseDisplayContainer(container:DisplayObjectContainer):void

參數是container,當然要用container.numChildren
當然您的預設本類變數this,或其他公用變數例如var myAclass,myBclass
您若寫成this.numChildren
或myAclass.numChildren
或myBclass.numChildren
當然都可以
只不過您的
public function traverseDisplayContainer(container:DisplayObjectContainer):void
要改為
public function traverseDisplayContainer():void
其他相關內容也要跟著改

2.這CODE是指,如果i為顯示物件容器,則再針對這些物件容器再找一次子顯示物件麼?這樣好像才能全部都找出來??
這是對的
請在29,30行之間插入
trace("我爸爸在上面");
會更清楚就變成這樣
if (container.getChildAt(i) is DisplayObjectContainer) {
trace("我爸爸在上面");
traverseDisplayContainer(DisplayObjectContainer(child));
}
這就是遞迴,直到他沒有小孩才退出這函數,若有小孩就繼續找小孩的小孩(孫子)
遞迴常常用在搜尋檔案,當發現是目錄時就往下再搜尋


本篇文章回覆於2012-08-09 21:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

遠仔
檢舉此回應
帥大~再請問~~@@

為何 #24 var child:DisplayObject;不能改為 var child:DisplayObjectContainer;呢?
是因為child放進去的都是顯示物件嗎?即使那物件可能也是容器,
以 traverseDisplayContainer(container);來說,則RectSprite 是container 的顯示物件,也是容器
以 traverseDisplayContainer(this);來說,container是this(書上說這裡指這文檔類)的顯示物件,也是容器
本篇文章回覆於2012-08-09 23:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

香帥
檢舉此回應
因為:DisplayObject是顯示對象,它包含容器及非容器顯示對象
而DisplayObjectContainer只是容器,是DisplayObject的子類
您也可以將這行if (container.getChildAt(i) is DisplayObjectContainer)
改為if (child is DisplayObjectContainer)
會更清楚是在詢問child(亦即DisplayObject)是否為容器的顯示對象,或者為不是容器的顯示對象
因此僅能用 var child:DisplayObject 才能包含兩者(容器及非容器顯示對象)
若是用 var child:DisplayObjectContainer ,則會發生錯誤,因為它是容器顯示對象,無法包含非容器顯示對象
本篇文章回覆於2012-08-10 19:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

遠仔
檢舉此回應
喔喔,了解~~!!3Q
本篇文章回覆於2012-08-11 00:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.