【问题标题】:libgdx Stage.dispose() does not detach actors immediatelylibgdx Stage.dispose() 不会立即分离演员
【发布时间】:2015-02-02 21:37:08
【问题描述】:

我使用 libgdx,我遇到了这种情况,我使用 Stage 并附加了三个Actors。 当为舞台调用act() 方法时,将调用每个演员的act() 方法。这是默认行为并且是正确的。

但是,如果我在第二个演员的act() 方法中处理场景,那么第三个演员的act() 方法仍然会被调用。我不会预料到这种行为。就像在舞台上调用 dispose() 方法后,这个演员并没有立即被分离。 对第三个演员的最后一次通话对我来说是有问题的,因为我遇到了一个异常并且我不知道如何避免它。如果第三个演员的 act() 方法不会在场景被实际处理之前最后一次被调用,那就太好了。

你知道我该如何避免这种情况吗?

我发现很难改变我的游戏设计,因为在我的情况下,第二个角色是敌人,第三个角色是防御塔。当敌人死亡时,我会处理场景以在屏幕上显示游戏。但是塔仍然在后台运行...

【问题讨论】:

  • 这是 Stage 的设计行为。它保证每个演员的act 方法在一帧中被调用一次,而不管其他演员在做什么。我认为在大多数情况下,这是最有用的行为。也许你可以分享你的塔的 act 方法中发生的导致异常的事情。
  • 谢谢,我相信重新设计我的应用程序的一部分可以避免这种情况。只是我觉得奇怪的是,即使在被处理之后,仍然有一个演员在舞台上表演。我不认为有一个干净的方法来处理这个。

标签: libgdx dispose actor stage detach


【解决方案1】:

尝试使用 actor.remove() 或 stage.clear()

【讨论】:

  • 感谢您的提示,我试过了,但没有任何改变。太奇怪了,即使场景被清除,没有更多的演员被附加到它上面,第三个演员的act()方法仍然被调用。我相信这个递归 act() 方法正在它自己的线程中被调用,我不能过早地停止它:)
【解决方案2】:

当你的敌人死亡时,你可以将控制你的舞台的任何类作为参数传递给你的演员,而不是直接改变屏幕/布置你的舞台。当你的演员死了,你可以,例如在持有你的舞台的班级中设置一个boolean进行过渡,然后在调用stage.act()之后,检查你是否需要进行过渡,然后安全地处置舞台。它不是很优雅,但它肯定会工作。还有很多方法可以实现从外部对象调用的转换。 boolean 可能非常有限,因为您无法告诉您的游戏要转换到哪个屏幕,因此您可能想要实现某种Runnable 实现。有很多方法。

只是一个想法。我希望这会有所帮助。

【讨论】:

  • 你是对的。这种行为只发生一次(对于放置舞台的框架) 对我来说有点奇怪,演员的 act 方法在舞台被放置后仍然运行。我认为除了以某种方式重新设计我的应用程序之外,没有其他干净的方法可以克服这个问题。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多