我制作游戏已经有一段时间了(即将完成) - 但游戏需要重播按钮,这是一项艰巨的任务。
我知道 GC 在 Flash 中很糟糕,但我想知道是否有一种方法可以删除所有内容,就像 Flash 应用程序刚刚开始一样。清除内存、游戏数据 - 我不必担心游戏加载,因为它的数据量并不大。
所有东西几乎都存在于 DataModel 中 - 但我担心如果我只是清除所有变量,我就会有一些孤立的内存。
任何转发想法都很棒。
干杯,伙计们。
最佳答案
我会这样做:
- 创建一个封装整个游戏的类,称为 GameContainer 或其他名称。
- 搜索所有源代码,并确保每次调用
addEventListener
,您正在通过true
对于“使用弱引用”论点。 - 在您的文档类(或框架脚本)中,创建 GameContainer 的单个实例并将其添加到舞台中,不执行任何其他操作。
现在,当您想要从内存中完全清除游戏时,请从舞台中删除 GameContainer 并将引用清空。内存不会立即释放,但游戏中的所有内容现在都可以释放。如果 Flash 认为它需要更多内存,它将触发 GC,并且大型孤立的 GameContainer 将被销毁。 (上面的步骤 2 将使您的事件监听器不被计为对对象的引用,并确保所有独立对象都符合处置条件。
不知道你说的Flash GC 可怕是什么意思。我不记得听说过其中有任何错误。除非您小心对待引用,否则它不会破坏您的对象,但所有垃圾收集都是如此。
关于actionscript-3 - 垃圾收集 - 手动删除所有内容!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606143/