使用顯示物件容器

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

若從顯示清單刪除 DisplayObjectContainer 物件,或是以其它方式移動或轉換,則也會刪除、移動或轉換 DisplayObjectContainer 中的各個顯示物件。

顯示物件容器本身就是一種顯示物件,它可以加入至另一個顯示物件容器中。例如,下列影像會顯示一個顯示物件容器 pictureScreen,其中包含一個邊框形狀及另外四個顯示物件容器 (屬 PictureFrame 類型):

檢視完整大小的圖形
A.
定義 pictureScreen 顯示物件容器之邊框的形狀

B.
本身為 pictureScreen 物件之子系的四個顯示物件容器

若要讓顯示物件出現在顯示清單中,您必須將它加入顯示清單的顯示物件容器中。您可以使用 addChild() 方法或容器物件的 addChildAt() 方法,執行這項作業。例如,若沒有下列程式碼的最後一行,就不會顯示 myTextField 物件。

var myTextField:TextField = new TextField(); 
myTextField.text = "hello"; 
this.root.addChild(myTextField);

在樣本程式碼中,this.root 會指向包含程式碼的 MovieClip 顯示物件容器;而在實際的程式碼中,您可以指定不同的容器。

您可以使用 addChildAt() 方法,將子系加入顯示物件容器子清單中的特定位置。子清單中這些從零開始的索引位置與顯示物件的圖層 (由前至後順序) 相關。例如,假設有下列三個顯示物件。每一個物件都是透過稱為 Ball 的自訂類別加以建立。

您可以使用 addChildAt() 方法,調整這些顯示物件在容器中的圖層。例如,以下列程式碼為例:

ball_A = new Ball(0xFFCC00, "a"); 
ball_A.name = "ball_A"; 
ball_A.x = 20; 
ball_A.y = 20; 
container.addChild(ball_A); 
 
ball_B = new Ball(0xFFCC00, "b"); 
ball_B.name = "ball_B"; 
ball_B.x = 70; 
ball_B.y = 20; 
container.addChild(ball_B); 
 
ball_C = new Ball(0xFFCC00, "c"); 
ball_C.name = "ball_C"; 
ball_C.x = 40; 
ball_C.y = 60; 
container.addChildAt(ball_C, 1);

執行這段程式碼之後,顯示物件就會如下所示放置於 container DisplayObjectContainer 物件中 (請注意物件的圖層):

若要將物件重新放置在顯示清單頂端,只要重新將它加入清單中即可。例如,執行上一個程式碼之後,若要將 ball_A 移至堆疊頂端,請使用下列這行程式碼:

container.addChild(ball_A);

這段程式碼會有效地自其 container 顯示清單中的位置移除 ball_A,再重新將它加入清單的頂端,最後結果是將它移至堆疊的頂端。

您可以使用 getChildAt() 方法,確認顯示物件的圖層順序。getChildAt() 方法會根據您傳遞給它的索引編號,傳回容器的子物件。例如,下列程式碼會在 container DisplayObjectContainer 物件的子清單中之不同位置上顯示出顯示物件的名稱:

trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_C 
trace(container.getChildAt(2).name); // ball_B

如果您從父容器的子清單移除顯示物件,清單上高於此物件的元素會在子索引中各自下移一個位置。例如,接續上一段程式碼的下列程式碼會示範,如果將子清單中下面一個顯示物件移除之後,container DisplayObjectContainer 中在位置 2 的顯示物件如何移至位置 1:

container.removeChild(ball_C); 
trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_B

removeChild()removeChildAt() 方法不會完全刪除顯示物件實體,而只是將它們從容器的子清單中移除。此實體仍然可以由另一個變數進行參考 (使用 delete 運算子,可將物件完全移除)。

由於顯示物件只有一個父容器,所以您只能將顯示物件的實體加入一個顯示物件容器。例如,下列程式碼會示範顯示物件 tf1 只能存在於一個容器中 (在此範例中是 Sprite,它可擴充 DisplayObjectContainer 類別):

tf1:TextField = new TextField(); 
tf2:TextField = new TextField(); 
tf1.name = "text 1"; 
tf2.name = "text 2"; 
 
container1:Sprite = new Sprite(); 
container2:Sprite = new Sprite(); 
 
container1.addChild(tf1); 
container1.addChild(tf2); 
container2.addChild(tf1); 
 
trace(container1.numChildren); // 1 
trace(container1.getChildAt(0).name); // text 2 
trace(container2.numChildren); // 1 
trace(container2.getChildAt(0).name); // text 1

若將包含於一個顯示物件容器中的顯示物件加入至另一個顯示物件容器中,它會自第一個顯示物件容器的子清單中移除。

除了上述方法外,DisplayObjectContainer 類別也會定義一些方法以配合子顯示物件使用,包括下列方法:

  • contains():判斷顯示物件是否為 DisplayObjectContainer 的子系。

  • getChildByName():依名稱擷取顯示物件。

  • getChildIndex():傳回顯示物件的索引位置。

  • setChildIndex():變更子顯示物件的位置。

  • swapChildren():替換兩個顯示物件的由前至後順序。

  • swapChildrenAt():替換由索引值所指定之兩個顯示物件的由前至後順序。

如需詳細資訊,請參閱適用於 Adobe Flash Platform 的 ActionScript 3.0 參考的相關項目。

請記住,顯示清單外的顯示物件,也就是不包含於 Stage 子系顯示物件容器中的顯示物件,稱為「清單外」顯示物件。