2011-08-11 48 views
1

的孩子,如果im全光照功能的MC添加到舞臺,像這樣:AS3 stage.addChild/stage.removeChild <<必須呼叫者

var myChild:MC= new MC(); 

function somefunc() 
{ 
    stage.addChild(myMC) 
} 

但是當我嘗試刪除MC:

stage.removeChild(myMC) 

我得到提供的DisplayObject必須是調用者錯誤的子... 任何建議或變通?

回答

2

如果可能,您可以嘗試隱藏並顯示movieClip。 我認爲它比刪除和添加代碼允許的情況要快一些。 請記住,這只是一個建議,有人比我更聰明,能夠幫助你。

+0

Ric,確保你知道你在做什麼,當你使一個displayobject不可見時。請閱讀[本文](http://www.developria.com/2008/11/visible-false-versus-removechi.html),瞭解alpha,visible和removeChild之間的詳細分類。 –

6

如果項目在舞臺上,您的代碼應該可以工作。也許,象這樣一個條件語句限定它:

if (myMC.stage != null) 
    stage.removeChild(myMC); 

另外,您可以使用下面的代碼,但它可能不是最好的做法。

if (myMC.parent != null)  
    myMC.parent.removeChild(myMC); 
+0

它再次運作,謝謝,雖然我overmas有一個有趣的點隱藏和showin – Ric

1

你也可以使用此故障安全:

如果(myMC.parent)myMC.parent.removeChild(myMC);

3

問題不在於removeChild。這是與顯示列表。如果您檢查displayobject的父屬性,當您調用「removeChild」時,它將爲空。

它爲什麼會成爲空可能是因爲很多原因的:

  • 家長是孩子之前歸零。
  • 孩子或父母有事件偵聽器,不會讓他們死亡。
  • 顯示對象實際上不是您要刪除的實例。這一點可以非常棘手的發現。 在調用removeChild時,查看您試圖刪除的變量的「名稱和父屬性」。
0

我可以解決這個問題,只需刪除我添加到該對象的每個EventListeners,然後再刪除它。