2010-02-13 32 views
0

如何檢查舞臺上是否存在?它沒有打印出「第一個不存在」和第二個「存在」?但它打印出「不存在」的兩個。如何檢查舞臺上是否存在?

我添加了一個計時器COS,我認爲需要等待一段時間才能添加到舞臺上,但它不起作用。

var idonnoe:TextField = new TextField(); 

if (Boolean(this.getChildByName('idonnoe'))) 
    { 
    trace("exists"); 
    } 
    if (!Boolean(this.getChildByName('idonnoe'))) 
    { 
    trace("doesn't exist"); 
} 

addChild(idonnoe); 
idonnoe.text = "hello"; 

var delay1:Timer = new Timer(1000, 1); 
delay1.start(); 
delay1.addEventListener(TimerEvent.TIMER_COMPLETE, afterDelay); 

function afterDelay(e:TimerEvent) :void { 
    if (Boolean(this.getChildByName('idonnoe'))) 
     { 
     trace("exists"); 
     } 
     if (!Boolean(this.getChildByName('idonnoe'))) 
     { 
     trace("doesn't exist"); 
    } 
} 

回答

1

getChildByName方法考慮到了myDisplayObject.name屬性,而不是指向它的變量的名稱。嘗試設置屬性,它現在應該以您正在搜索的方式存在。

idonnoe.name = "idonnoe"; 
+0

你的延遲不應該是必須的了。 – LopSae 2010-02-13 08:04:52

0

直接引用對象更爲常見。這使得處理這種情況更容易。 DisplayObjectContainer的'contains(displayObject:DisplayObject)'方法非常方便地找出對象是否連接到顯示列表。

var displayObject:TextField = new TextField(); // any sublclass of DisplayObject 
addChild(displayObject); 

// test if the current display list contains the sprite 
trace(contains(displayObject)); 

// test if the sprite is attached to the stage 
trace(displayObject.stage != null); 

// test if the sprite is attached to ANY display list 
trace (displayObject.parent != null); 
+0

你什麼時候使用Sprite?我所知道的Sprite是一個沒有時間線的電影剪輯。 – yeeen 2010-02-13 12:41:02

+0

哦對不起,我只是使用了一個精靈,但它可能是一個TextField,MovieClip或其他任何真正擴展DisplayObject的東西。將編輯... – 2010-02-13 12:42:41

+0

爲了快速回答您的問題,sprite是一個'更輕的'DisplayObject,因爲它不包含時間線相關的方法。此外,精靈不是動態類,因此您無法快速創建字段(這會使執行速度變慢)。基本上,如果DisplayObject不包含任何時間軸,請嘗試使用Sprite而不是MovieClip。 – 2010-02-13 12:53:35