这里是新手程序员。
我目前正在编写一个简单的游戏,其标题屏幕和主游戏循环位于单独的“关键帧”中(这是在 CS6 中)。一旦我从标题屏幕转换到游戏关键帧,我担心按钮/影片剪辑/变量会保留下来并浪费内存+弄乱屏幕。
如果我将变量/函数设置为“私有(private)”,这会帮助垃圾收集器处理它们吗?我应该如何“清除屏幕”并确保我不会浪费/泄漏内存?
我阅读的学习 AS3 的教程或书籍都没有真正涵盖这个主题,如果有任何好的指南或明显的提示我错过了 AS3 中的内存管理最佳实践,我很感兴趣在看到他们时。到目前为止我唯一学到的就是我应该手动将所有事件监听器设置为弱引用。
额外问题:我正在使用全屏位图并将内容传输到其上以供显示。如果我每帧将数十个对象传输到屏幕上,我不需要担心被“覆盖”的传输“ Sprite ”,是吗?我希望位图只有一像素厚,而不仅仅是将东西堆叠在一起。
最佳答案
首先,您完全控制资源的唯一方法是保留其预期用途的时间线,以 swc 或 swf 格式创建和导出资源,您可以嵌入前者,也可以嵌入或嵌入加载后者。
您应该做的是学习如何以面向对象的方式进行开发,从 Document 类开始(因为您使用的是 CS6),然后使用一系列已定义任务的类来构建您的游戏。使用类可以提高整个游戏的可重用性。根据复杂性,我会考虑像 PureMVC 或 Robot Legs 这样的框架。
Flash 中的垃圾收集是标记和清除,这意味着您必须取消引用所有对象,这通常从删除关联的监听器、计时器以及对它们的任何进一步引用开始,例如。从数组或对象哈希中清除。最后,您可以将有问题的对象设置为 null,这使其“适合”垃圾回收,但实际上并不能保证它。 Flash 将根据需要进行清理。
就我个人而言,如果你能掌握Flash Builder,它有一个很棒的内存管理分析工具,当你使用上面提到的OOP进行开发时,你可以使用这个工具来查看游戏中存在的所有实例。现在,这里的好处是您可以及时创建内存快照,并比较它们以查看哪些对象徘徊并导致内存泄漏。有一个垃圾收集按钮,您应该在捕获快照之间调用该按钮,该按钮仅在您开发时可用,尽管使用 Adobe AIR 您可以手动强制执行 gc 调用。
关于你的奖金问题,我不确定你是如何进行这种位 block 传输的,如果你向舞台添加对象,这会增加内存,你无法避免这一点。你所描述的1px厚是flash渲染的,你可以通过右键单击舞台并选择重绘区域选项来看到正在重绘的内容,看到一个红色框显示flash必须重绘的内容,它只会重绘它需要的内容这对于检查帧速率是否受到影响很有用。
总结一下:
考虑使用 Flash CS6 创建资源。
了解 Actionscript 3 中的面向对象编程。
考虑在 Flash Builder(或免费的 Flash Develop)中进行开发。
OOP 将帮助组织和取消引用对象以进行垃圾收集。
希望这对您有所帮助,并祝您游戏顺利。
关于actionscript-3 - (AS3) 将变量设置为 private 是否有助于垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14517944/