2014-12-04 89 views
1

我使用libgdx,我有這種情況下,我使用Stage與三個Actors附加。 當爲舞臺調用act()方法時,每個actor的act()方法都被調用。這是默認行爲,它是正確的。libgdx Stage.dispose()不立即分離演員

但是,如果我將場景置於第二個演員act()方法中,那麼第三個演員的act()方法仍然被調用。我不會預料到這種行爲。就好像這個演員在舞臺上被調用dispose()方法後不會立即分離。 對第三位演員的最後一次通話對我來說是有問題的,因爲我得到了一個異常,我不知道如何避免。如果第三個演員的act()方法不會被最後一次調用,那麼現場實際上處置將會很好。

你有什麼想法我怎麼能避免這種情況?

我覺得很難改變我的遊戲設計,因爲在我的情況下,第二個演員是敵人,第三個演員是防禦塔。當敵人死亡時,我處理場景以便在屏幕上顯示遊戲。但塔仍然在起作用的背景...

+0

這是Stage的設計行爲。它保證每個演員的「行爲」方法在一個框架中被調用一次,而不管其他演員在做什麼。我認爲在大多數情況下,這是最有用的行爲。也許你可以分享你塔的行爲方法中發生的異常。 – Tenfour04 2014-12-04 21:43:26

+0

謝謝,我相信重新設計我的應用程序的一部分可以避免這種情況。只是我覺得很奇怪,即使在演員被處置之後,仍然有演員在舞臺上表演。我不認爲有一個乾淨的方式來處理這個問題。 – linu 2014-12-07 22:02:03

回答

0

嘗試使用actor.remove()或stage.clear()

+0

感謝您的提示,我嘗試過但沒有任何改變。這很奇怪,即使場景被清除並且沒有更多的演員被附加到它,第三個actor的act()方法仍然被調用。我相信這個遞歸的act()方法在它自己的線程中被調用,並且我不能過早地阻止它:) – linu 2014-12-04 21:22:09

0

而不是改變畫面/直接地佈置你的舞臺,當你的敵人死了,你可以傳遞無論什麼階級控制你的舞臺作爲你演員的參數。當你的演員死亡時,例如你可以在階段中設置一個boolean來讓你的舞臺轉換,然後在stage.act()被調用之後,檢查是否需要轉換,然後安全地處理舞臺。這不是很優雅,但它肯定會奏效。還有很多方法可以實現從外部對象調用的轉換。 A boolean可能是非常有限的,因爲你不能告訴你的遊戲你想要過渡到哪個屏幕,所以你可能想要實施某種Runnable實現。有很多方法。

只是一個想法。我希望這有幫助。

+1

你是對的。這種行爲只發生一次(對於舞臺配置的幀) 演員們的行爲方法仍然在舞臺佈置後運行對我來說有點奇怪。 我認爲沒有其他乾淨的方法來克服這個問題,而不是以某種方式重新設計我的應用程序。謝謝 – linu 2014-12-07 21:49:41