2010-10-07 69 views

回答

5

您可以收聽容器上的Event.ADDED事件。這個事件會冒泡,所以無論何時將一個顯示對象添加到容器或其任何子項中,您都會被調用。

下面是一個如何做到這一點的例子。你會看到黑匣子總是保持在最前面。

var container:DisplayObjectContainer = this; // this is a frame script but just change this line as necessary 
container.addEventListener(Event.ADDED,handleAdded,true); 

function handleAdded(e:Event):void { 
    // this if tries to cover some edge cases, unlikely to happen in your code, from your description 
    if(container == topElement.parent && container.numChildren > 0 && container.getChildIndex(topElement) != container.numChildren - 1) { 
     container.setChildIndex(topElement,numChildren - 1); 
    } 
} 

function getSprite(c:uint):Sprite { 
    var sp:Sprite = new Sprite(); 
    sp.graphics.beginFill(c); 
    sp.graphics.drawRect(0,0,100,100); 
    sp.graphics.endFill(); 
    return sp; 
} 

var topElement:Sprite = getSprite(0); 

container.addChild(topElement); 
var sp:Sprite = getSprite(0xff0000); 
container.addChild(sp); 
sp.addChild(getSprite(0xff00)); 
var sp2:Sprite = getSprite(0xff); 
container.addChild(sp2); 

不過,我認爲這是更簡單和更清潔的只是有2個集裝箱,也就是說,topbottom,有點像層。在top中,您需要添加始終必須位於頂部的元素(或者您可能不需要擁有這個額外的容器,這可能是您的元素)。在bottom中,您可以添加和刪除任何你想要的。然後,你可以忘記手動重新加載東西(至少要保持頂部元素在頂部)。

+0

這很好,謝謝。 – redconservatory 2010-10-14 14:56:34

3

您可以覆蓋父對象中的addChild()方法。在這種方法中,你可以將孩子轉移到使用

setChildIndex(myDisplayObject, numChildren-1); 

這樣每次一個對象添加到父的頂部,父移動你的對象上。

+0

該代碼已經在我的問題! – redconservatory 2010-10-14 14:55:57

+1

這不是完全的,我的想法是重寫你的容器的addChild(),只需一行代碼就可以得到你想要的。我知道你已經寫了這行代碼,但關鍵點在於你放置該行的地方:) – wezzy 2010-10-14 18:31:55

相關問題