有沒有辦法讓顯示對象始終位於顯示列表的頂部?有沒有辦法將對象始終保持在顯示列表的頂部?
例如,我知道你可以設置在childIndex,即:
setChildIndex(myDisplayObject的,numChildren的-1);
但是,有沒有一種方法,一個對象已經感覺到其他東西已經添加到顯示列表並重新相應地自己呢?
有沒有辦法讓顯示對象始終位於顯示列表的頂部?有沒有辦法將對象始終保持在顯示列表的頂部?
例如,我知道你可以設置在childIndex,即:
setChildIndex(myDisplayObject的,numChildren的-1);
但是,有沒有一種方法,一個對象已經感覺到其他東西已經添加到顯示列表並重新相應地自己呢?
您可以收聽容器上的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個集裝箱,也就是說,top
和bottom
,有點像層。在top
中,您需要添加始終必須位於頂部的元素(或者您可能不需要擁有這個額外的容器,這可能是您的元素)。在bottom
中,您可以添加和刪除任何你想要的。然後,你可以忘記手動重新加載東西(至少要保持頂部元素在頂部)。
您可以覆蓋父對象中的addChild()方法。在這種方法中,你可以將孩子轉移到使用
setChildIndex(myDisplayObject, numChildren-1);
這樣每次一個對象添加到父的頂部,父移動你的對象上。
該代碼已經在我的問題! – redconservatory 2010-10-14 14:55:57
這不是完全的,我的想法是重寫你的容器的addChild(),只需一行代碼就可以得到你想要的。我知道你已經寫了這行代碼,但關鍵點在於你放置該行的地方:) – wezzy 2010-10-14 18:31:55
這很好,謝謝。 – redconservatory 2010-10-14 14:56:34