2013-10-31 25 views
0

我在AS3中進行遊戲時,您可以保存和恢復您的遊戲。如何刪除如果它是可見的

玩家可以在遊戲過程中在內聯屏幕或遊戲中加載他保存的遊戲。

我有一個錯誤(不是很重要,因爲遊戲還在工作,但我想更正爲了乾淨),因爲我不知道如何把它放在代碼中。

因此,當玩家在Introscreen上點擊「加載」時,會打開一個窗口,在那裏他可以選擇他想要恢復的遊戲。

當他選擇一個遊戲時,他點擊它並且IntroScreen和恢復窗口消失。 下面的代碼此:

if(allSaveData){ 
.. 
dispatchEvent(new Event("closeThis")); 
this.parent.removeChild(introScreen); 
} 

但是,當他在比賽中,他想恢復。他點擊「esc」並出現恢復窗口。但是IntroScreen不在這裏。所以當他恢復他的遊戲時,我在「this.parent.removeChild(introScreen)」中出現錯誤;「因爲IntroScreen不在這裏。

我已經試過這樣:

if(allSaveData){ 
    .. 
    dispatchEvent(new Event("closeThis")); 
       } 
       if (introScreen.visible == true){ 
       this.parent.removeChild(introScreen); 
    } 

但它不工作。 你知道我怎麼能告訴代碼「如果內置屏幕在這裏關閉它,如果沒有的話」?

謝謝你的幫助!

+0

好像'包含()'方法是相關的:http://stackoverflow.com/questions/4022966/is-there-a-way-to-check-if-displayobject-a-is-a -descendant-of-displayobject-b – Cherniv

回答

2

visible是顯示/隱藏的顯示對象。您不能使用此來確定對象是否添加到顯示列表中。有許多選項可以實現這一點。

選項1:檢查introScreenparent財產。

if (introScreen.parent) { 
    introScreen.parent.removeChild(introScreen); 
} 

選項2:使用contains方法。

if (this.parent.contains(introScreen)) { 
    this.parent.removeChild(introScreen); 
} 

選項3:使用try-catch塊並簡單地忽略錯誤。

try { 
    this.parent.removeChild(introScreen); 
} catch(err:Error) { 
    // ignore the error when it's not present 
} 
+0

可能最好檢查孩子是否在顯示列表中檢查是否已經定義了「stage」?像'if(introScreen.stage)'? – Cherniv

+0

@Cherniv,但'stage'將會在其他父項中被添加,即如果introScreen被添加到除this.parent之外的某個容器中,this.parent.removeChild(introScreen)仍然會拋出錯誤。但我同意,對於這種特殊情況,這可能不是問題。 – taskinoor

+0

它與選項1一起工作!謝謝 ! – user2421975

0

嘗試 introScreen.parent.removeChild(introScreen)

相關問題