何时从显示列表中删除对象

时间:2012-10-02 13:03:56

标签: flash actionscript

我有一个由许多不同的屏幕(登录,菜单,游戏等)组成的Flash游戏,每个屏幕都有自己的背景图像。

例如,在成功登录后,我可以执行:

addChild(new Menu());

这将在登录屏幕的顶部创建一个菜单,登录屏幕将不再可见。同样,如果用户点击菜单中的“播放”,我可以拨打addChild(new Game())来启动游戏。

这会让显示树像我猜的那样

-Login page
  - Menu
    - Game

我应该从显示树中删除以前的屏幕吗?例如,当用户点击菜单中的“播放”时。我应该在致电removeChild(menu)之前先addChild(new Game())吗?

2 个答案:

答案 0 :(得分:0)

是的,否则你会浪费宝贵的内存和CPU周期,删除未使用的屏幕的好处肯定超过了将所有屏幕保留在显示列表上的好处。

答案 1 :(得分:0)

这显然取决于游戏的架构以及如何管理资源。当你标记问题flash而不是AIR时,我将假设这个游戏是使用网络浏览器消费的。

我要指出的第一件事是,首先通过创建对它们的引用来删除项目会更容易:

var menu:Menu = new Menu();
addChild(menu);

// later
removeChild(menu);

您需要做的是平衡维护对象的效率而不是重新创建它们的成本。

如果你有一个正在进行大量计算的对象,那么只是执行removeChild可能是不够的,通常你在类中有一个destroy()方法来清理资源,然后你从头开始重新创建对象,从而允许垃圾收集器更有效地管理资源。

如果您的对象像示例中的菜单一样,没有做任何花哨的事情,那么将其保存在内存中并删除并重新附加到显示列表可能就好了。

我希望这可以帮助你完成游戏。