1

在我的文档类中,我有这个代码

_gameWorld = new GameWorld();
addChild(_gameWorld);

GameWorld 有一个很大的构造函数来创建关卡、玩家、武器等。

我的印象是,如果我当时这样做

removeChild(_gameWorld);
_gameWorld = null;

因为 GameWorld 对象现在无法访问,因此关卡、玩家和其中引用的所有其他内容也是如此,因此整个事物都将被垃圾回收。情况似乎并非如此。相反,我发现旧游戏世界的元素仍在尝试发挥作用。

我想知道是否可能是因为其中一些元素中有事件监听器,监听其他元素,“this”或有时是“stage”。我尝试将它们设置为弱引用,但没有帮助,我的理解是,例如持有对舞台的引用的事件侦听器不应该阻止该对象被垃圾收集。

对于调试,我希望能够非常快速地重新启动整个游戏,所以我希望它会像

removeChild(_gameWorld);
_gameWorld = null;
_gameWorld = new GameWorld();
addChild(_gameWorld);

而不是必须以某种方式精心拆卸整个东西。有人可以指出我正确的方向吗?

4

1 回答 1

0

在你使用的每个类中创建一个函数,比如destroy(),每次不再使用对象时调用它(或者如果你没有显式调用remove/destroy,你可以添加事件监听器来阶段删除对象) .

在这个 destroy() 函数中,手动删除所有事件侦听器,并清空所有类级别列表,例如:向量、数组等。此外,所有引用类型的类级别变量 - 将它们设置为 null。

于 2013-10-21T15:58:22.990 回答