我已经建立了一段时间的游戏(差不多完成了) - 但游戏需要一个重播按钮,这是一项重大任务。
我知道GC在flash中是可怕的,但我想知道是否有办法擦除所有内容,就好像Flash应用程序刚刚开始一样。清除内存,游戏数据 - 我不必担心游戏加载,因为它对数据的影响不大。
一切都存在于DataModel中 - 但我担心如果我只清除所有变量,我就会有一些孤立的内存。
任何转发的想法都会很棒。
欢呼你们。答案 0 :(得分:2)
我会这样做:
addEventListener
时,您都在传递true
“使用弱引用”参数。现在,当您想要从内存中完全清除游戏时,请从舞台中删除GameContainer并将引用置空。内存不会立即发布,但游戏中的所有内容现在都有资格发布。如果Flash认为它需要更多内存,它将触发GC,并且大型孤立的GameContainer将被破坏。 (上面的步骤2将使您的事件侦听器不再被视为对象的引用,并确保所有自包含对象都有资格处置。
不确定你对Flash的GC的意思是多么可怕。我记不起听说过它的任何错误。除非你小心你的引用,否则它不会对你的对象进行核对,但对于所有垃圾收集都是如此。
答案 1 :(得分:1)
不缺少刷新页面。你可以通过加载一个单独的swf然后卸载它来做一些黑客攻击,但这样做会像正确的方式那样容易出错。
我的建议是只需按下并编写你的重置函数然后得到something to monitor memory并确保它通过重新启动/重置多次来工作。
答案 2 :(得分:0)
Flash的垃圾收集器的问题是,据我所知,你不能强迫它“收集”。我在一个程序中遇到了这个问题,我将在其中加载各种外部SWF,偶尔Flash也不会加载它们。您可能需要做的是创建一个函数,在游戏结束时将代码中的每个主要变量设置为null,如果您想要真正的重置。
仍然无法保证,但不幸的是我很确定没有强制释放内存的捷径。
(对我而言,这也意味着确保我的事件处理程序被正确清除,并且在我的外部SWF加载程序的情况下,我的加载器会在关闭内容后“卸载()”。)