1

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

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

addChild(new Menu());

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

我猜这会使显示树像这样

-Login page
  - Menu
    - Game

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

4

2 回答 2

0

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

于 2012-10-02T13:09:53.293 回答
0

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

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

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

// later
removeChild(menu);

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

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

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

我希望这对您的游戏有所帮助。

于 2012-10-02T13:12:48.330 回答