2014-12-04 86 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