顯示列表簡介

在 AS3 中,顯示資源在新增到顯示列表之前不可見。

AIR / Flash 執行時具有分層顯示結構(父子關係,其中子項可以有自己的子項),stage 是頂級父項。

要在顯示列表中新增內容,請使用 addChildaddChildAt。以下是繪製圓形並將其新增到顯示列表的基本示例:

var myCircle:Shape = new Shape();
        
myCircle.graphics.beginFill(0xFF0000); //red
myCircle.graphics.drawCircle(25, 25, 50);
myCircle.graphics.endFill();
        
this.addChild(myCircle); //add the circle as a child of `this`

要檢視上面示例中的物件,this(程式碼的上下文)也必須位於顯示列表中,以及它可能具有的任何父級。在 AS3 中,stage 是最頂級的父母。

顯示物件只能有一個父物件。因此,如果一個孩子已經有一個父母,並且你將它新增到另一個物件,它將從它的前一個父母中刪除。

Z 順序/分層

假設你複製了上一個示例中的程式碼,因此你有 3 個圓圈:

var redCircle:Shape = new Shape();
redCircle.graphics.beginFill(0xFF0000); //red
redCircle.graphics.drawCircle(50, 50, 50); //graphics.endFill is not required

var greenCircle:Shape = new Shape();
greenCircle.graphics.beginFill(0x00FF00); //green
greenCircle.graphics.drawCircle(75, 75, 50);
        
var blueCircle:Shape = new Shape();
blueCircle.graphics.beginFill(0x0000FF); //blue
blueCircle.graphics.drawCircle(100, 100, 50);

this.addChild(redCircle); 
this.addChild(greenCircle); 
this.addChild(blueCircle); 

由於 addChild 方法將子項新增到同一父項中的所有其他項之上,因此你將獲得此結果,其中專案的分層順序與你使用 addChild 的順序相同:

http://i.stack.imgur.com/VqKme.jpg

如果你想要一個孩子相對於它的兄弟姐妹分層不同,你可以使用 addChildAt。使用 addChildAt,你傳入另一個引數,該引數指示子項應該處於的索引(z 順序)。0 是最底層的位置/層。

this.addChild(redCircle); 
this.addChild(greenCircle); 
this.addChildAt(blueCircle,0); //This will add the blue circle at the bottom

http://i.stack.imgur.com/8GtkC.jpg

現在,藍色圓圈在它的兄弟姐妹之下。如果稍後,你想要更改子項的索引,則可以使用 setChildIndex 方法(在子項的父項上)。

this.setChildIndex(redCircle, this.numChildren - 1); //since z-index is 0 based, the top most position is amount of children less 1.

這將重新排列紅色圓圈,使其高於一切。上面的程式碼產生與 this.addChild(redCircle) 完全相同的結果。

刪除顯示物件

要刪除物件,你可以使用相反的 removeChildremoveChildAt 方法以及 removeChildren 方法。

removeChild(redCircle); //this will take redCircle off the display list

removeChildAt(0); //this will take the bottom most object off the display list 

removeChildren(); //this will clear all children from the display list

removeChildren(1); //this would remove all children except the bottom most

removeChildren(1,3); //this would remove the children at indexes 1, 2 & 3

活動

將子項新增到顯示列表時,會對該子項觸發一些事件。

  • Event.ADDED
  • Event.ADDED_TO_STAGE

相反,還有刪除事件:

  • Event.REMOVED
  • Event.REMOVED_FROM_STAGE

Adobe Animate / Flash Professional

處理 FlashProfessional / Adob​​e Animate 時間軸時,向時間軸新增內容會自動處理顯示列表的細微差別。他們通過時間線自動新增和刪除顯示列表。

但是,請記住:

如果你通過程式碼操作由時間軸建立的顯示物件的父項(通過使用 addChild / setChildIndex),則該子項將不再由時間軸自動刪除,並且需要通過程式碼刪除。