![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 遠仔 ![]()
![]() |
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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |