顯示列表簡介
在 AS3 中,顯示資源在新增到顯示列表之前不可見。
AIR / Flash 執行時具有分層顯示結構(父子關係,其中子項可以有自己的子項),stage
是頂級父項。
要在顯示列表中新增內容,請使用 addChild
或 addChildAt
。以下是繪製圓形並將其新增到顯示列表的基本示例:
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)
完全相同的結果。
刪除顯示物件
要刪除物件,你可以使用相反的 removeChild
和 removeChildAt
方法以及 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 / Adobe Animate 時間軸時,向時間軸新增內容會自動處理顯示列表的細微差別。他們通過時間線自動新增和刪除顯示列表。
但是,請記住:
如果你通過程式碼操作由時間軸建立的顯示物件的父項(通過使用 addChild / setChildIndex),則該子項將不再由時間軸自動刪除,並且需要通過程式碼刪除。