每天學一點flash(53)容器類

來源:互聯網
上載者:User

   DisplayObjectContainer 類是可用作顯示列表中顯示對象容器的所有對象的基類。作為容器類,我們使用as3的時候,接觸太多了,隨便都要寫addChild 或者removeChild方法操作我們的顯示對象。對於這個容器類,你認識多少?我不一定可以給一個滿意的答案給你,但是我們可以交流一起討論完成對這個容器類的理解。

 

 容器簡單來講,就是裝東西的器皿。在生活中,用它裝水,裝湯等例子。在as3裡面同樣有著同樣的功能,DisplayObjectContainer 類不能執行個體化,我們不需要進行對它進行執行個體化,才調用它的方法,對於容器這種概念,在as3裡面是一個非常重要的概念。容器裡面,可以裝載我們的顯示對象,習慣使用addchild 或者使用addChildAt,這樣我們一個個執行個體對象就可以添加到容器裡面了。建立容器後,是否就不需要我們去管理呢?對於容器這種管理方式,這是一個很值得去研究的話題。電腦有一個很重要的資料結構------樹。這個與我們有什麼關係呢? 答案很簡單,採用樹這儲存結構,顯得更加健壯。

一,樹的結構

樹結構 有根節點,有子節點,另外說法,爸爸下有兒子。

我們看一下,addChild,在繼承了Sprite類的時候,使用這方法添加了一個對象

public class example extends Sprite

{

      public function  example()

     {

       addChild(xxxxx);

     }

}

}

 

 

 

 

 

 

 

圖裡面簡單說C 有A和B,而A和B分別包含了1-4.

 

 

問題:addChild 對象的時候,有先後順序嗎?

 

這裡不回答,嘗試一下

addChild(A) addChild(B)

addChild(B) addChild(A)

區別在那裡?

 

 

 

二,索引表

添加容器後,在容器裡面的對象是有索引的,有順序的。刪除某一個對象後,索引表會發生相應的改變。在這個容器內裡面我為它定義這一個概念。使用索引表的時候,這樣對我們搜素節點和理清容器內部關係有很大協助。添加一個對象後,索引表就會建立起來,他所在的索引就為0,再增加一個就會變成1.numChildren數目會變成2。(可以看上面的圖)

 

 

三、添加節點

看到上面樹的結構,可以想像出樹的形態的千之百態,一棵樹怎麼可以沒有葉子呢?他是是不每年春天才可以長出葉子呢?事實上,很多情況樹冬眠後,會發芽。但是在As3裡面,添加節點就僅僅使用addChild(顯示對象) 或者addChildAt 兩個常見的方法就可以實現為樹添加子葉。是不是覺得很方便呢?可以去嘗試一下,但是問題是,是不是所有的對象都適合添加到容器當中呢?這就要看addChild 裝的是神還是鬼。addChild 所在的參數裡面,很顯然就要需要繼續Displayobject的子物件,不然嘗試去添加一個bitmapdata對象的,看看能否實現?添加節點後,索引表就是建立起來。進行對節點刪除,或者查詢的時候,就要好好利用這個索引關係。

 

 

 

三,容器內搜尋節點

容器是一個顯示對象管理者,它具備添加,刪除,修改,查詢等功能。

查詢的功能是容器類一個很有趣的地方,之所以有趣,我們可以想象一下,在樹上尋找一片葉子那樣。我們如同一個會爬樹的猴子 ,樹葉的數目有限,因此可具搜尋性。通過迴圈,我們可以搜尋到我們想要的葉子。

容器類裡面恰好提供了這個協助。如getChildAt  getChildByName getChildIndex 等方法協助我們搜素到節點的位置,以後其他一些資訊,索引等等。

四,刪除節點

容器裡面擁有管理對象的能力。如果我希望刪除某一個節點,那麼就可以通過

removeChild ()

 

removeChildAt ()

 兩個常用的方法來刪除。問題是由誰來負責刪除任務?調用者是誰?這樣是常見一個問題。調用者的職責就是刪除某一個節點,自然我們想到由容器本身執行。看上面的圖,C是根節點,A和B 都是他的子節點,如果我想刪除A ,那麼調用者自然是C(也就是說父節點),爸爸要刪除兒子,C.removeChild(A),因為A和B都是C的一部分分支。

同理 刪除和A和B的裡面的節點,同樣可以使用到這種理解的方式進行刪除。

 

這種常見的方式。

結果是建立起一種樹型的結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.