在dispose()libgdx中重置变量

时间:2013-10-18 01:56:08

标签: java libgdx screens

我希望this.dispose();具有相同的效果而不会出现StackOverflow错误。如何轻松处理我的所有变量(我有~100)?我想删除当前屏幕并切换屏幕,如果我切换回来,就好像旧屏幕永远不存在一样。我一直在尝试各种方法来处理当前屏幕,到目前为止,在dispose()方法中手动处理似乎是最好的选择。

1 个答案:

答案 0 :(得分:3)

在大多数情况下,手动处理dispose() Screen方法是最好的方法,因为对于大多数资源来说,这是最早可能的,也是最新的可能时间点。有时如果您知道在更改Screen之前不再需要某些东西,您也可以在此之前完成,但这应该只是一个特例。

至于你的StackOverflow错误:这不是因为你有很多变量,而是因为你正在处理的资源之间似乎存在任何类型的循环依赖。它可以只是两个dispose()相互依赖的资源。一个例子:

Class A {
    private B b;

    public void dispose() {
        b.dispose();
    }
}

Class B {
    private A a;

    public void dispose() {
        a.dispose();
    }
}

只要你调用这两个资源中的一个dispose(),你就会遇到无限循环并最终成为StackOverflow,因为你的函数调用堆栈是有限的。

这也可能不仅仅有两个资源,可能还有另一个C类,你可能有一个像A一样的圈子 - > B - > C - >甲