Actionscript 3 (AS3)将变量设置为私有是否有助于垃圾收集?

Actionscript 3 (AS3)将变量设置为私有是否有助于垃圾收集?,actionscript-3,memory,memory-management,actionscript,garbage-collection,Actionscript 3,Memory,Memory Management,Actionscript,Garbage Collection,新手程序员在这里 我目前正在编写一个简单的游戏,标题屏幕和主游戏循环在单独的“关键帧”(在CS6中)。一旦我从标题屏幕过渡到游戏关键帧,我担心按钮/电影嘴唇/变量会粘在屏幕上,浪费内存+使屏幕混乱 如果我将变量/函数设置为“private”,这会帮助垃圾收集器处理它们吗?我应该如何“清除屏幕”并确保我没有浪费/泄漏内存 为了学习AS3,我一直在阅读的教程或书籍中没有一本真正涵盖这一主题,如果在AS3内存管理最佳实践方面,有什么好的指南或明显的提示我错过了的话,我很想看看。到目前为止,我唯一学到的

新手程序员在这里

我目前正在编写一个简单的游戏,标题屏幕和主游戏循环在单独的“关键帧”(在CS6中)。一旦我从标题屏幕过渡到游戏关键帧,我担心按钮/电影嘴唇/变量会粘在屏幕上,浪费内存+使屏幕混乱

如果我将变量/函数设置为“private”,这会帮助垃圾收集器处理它们吗?我应该如何“清除屏幕”并确保我没有浪费/泄漏内存

为了学习AS3,我一直在阅读的教程或书籍中没有一本真正涵盖这一主题,如果在AS3内存管理最佳实践方面,有什么好的指南或明显的提示我错过了的话,我很想看看。到目前为止,我唯一学到的是,我应该手动将所有事件侦听器设置为弱引用


附加问题:我正在使用一个全屏位图,并在上面显示一些东西。如果我每帧在屏幕上快速播放几十个对象,我不需要担心被“掩盖”的快速播放的“精灵”,是吗?我希望位图有一个像素厚,而不仅仅是将东西堆叠在一起。

首先,你可以完全控制你的资源的唯一方法是,如果你把时间线留给它的用途,以swc或swf格式创建和导出资产,可以嵌入前者,也可以嵌入或加载后者

您应该做的是学习如何以面向对象的方式进行开发,从一个文档类(正如您使用CS6)开始,然后使用一系列定义了任务的类来构建您的游戏。在游戏中使用类可以提高可重用性。根据复杂性,我会考虑一个框架,如PuReMVC或机器人腿。< /P> flash中的垃圾收集是标记和清除,这意味着您必须取消引用所有对象,这通常从删除关联的侦听器、计时器和对它们的任何进一步引用开始,例如从数组或对象哈希中清除。最后,您可以将有问题的对象设置为null,这使得它对于垃圾收集是“可省略的”,但实际上并不保证它。Flash会来清理它认为合适的地方

就个人而言,如果你能使用Flash Builder,它有一个很棒的内存管理评测工具,当你使用上面提到的OOP进行开发时,你可以使用这个工具查看游戏中存在的所有实例。现在,这里的优点是,您可以及时进行内存快照,并比较它们,以查看哪些对象徘徊在内存中并导致内存泄漏。有一个垃圾收集按钮,您应该在捕获快照之间调用它,这仅在您开发时可用,尽管使用AdobeAIR您可以手动强制gc调用

关于你的奖金问题,我不知道你是如何做这个闪电,如果你是添加对象的阶段,这是增加内存,你不能避免这一点。您描述为1px厚的是flash渲染的内容,您可以通过右键单击舞台并选择“重画区域”选项来查看正在重画的内容,要查看显示flash必须重画的内容的红色框,它将只重画需要的内容,这对于检查帧速率是否受到影响非常有用

因此,总结一下:

考虑使用FlashCS6创建资产

了解Actionscript 3中的面向对象编程

考虑在Flash Builder中开发(或免费Flash开发)

OOP将帮助组织和取消引用垃圾收集的对象


我希望这对你的比赛有帮助,祝你好运

如果您使用CS6中的时间线来编写代码,那么很可能无法使用访问修饰符。仅当使用自定义类且大多数基于时间轴的代码不使用自定义类时,它们才可用