(AS3)将变量设置为私有帮助垃圾回收?

时间:2013-01-25 08:21:42

标签: actionscript-3 memory memory-management actionscript garbage-collection

新手程序员在这里。

我目前正在使用标题画面和主游戏循环编写一个简单的游戏,在单独的“关键帧”中(这是在CS6中)。一旦我从标题屏幕转换到游戏关键帧,我担心按钮/动画片段/变量会一直存在,浪费内存+使屏幕变得杂乱。

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

我一直在阅读以学习AS3的教程或书籍都没有涵盖这个主题,如果有任何好的指南或明显的提示我错过了内存管理最佳实践AS3我感兴趣看到他们。到目前为止我唯一学到的就是我应该手动将所有事件监听器设置为弱引用。

奖金问题:我正在使用全屏位图并在其上进行blitting以显示我的内容。如果我每帧都会在屏幕上显示数十个对象,我不需要担心被“掩盖”的blitted“精灵”,是吗?我希望位图的厚度只有一个像素,而不仅仅是堆叠在一起。

1 个答案:

答案 0 :(得分:2)

首先,您可以完全控制资源的唯一方法是,您可以将时间表保留为目标,创建和导出资产为swc或swf格式,您可以嵌入前者并嵌入或嵌入加载后者。

您应该做的是学习如何以面向对象的方式开发,从Document类开始(当您使用CS6时),然后使用一系列已定义任务的类构建游戏。使用课程可以提高整个游戏的可重用性。根据复杂程度,我会考虑像PureMVC或Robot leg这样的框架。

flash中的垃圾收集是标记和扫描,这意味着您必须取消引用所有对象,这通常从删除关联的侦听器,计时器以及对它们的任何进一步引用开始,例如。从数组或对象哈希中清除。最后,您可以将有问题的对象设置为null,这使得它对于垃圾收集来说“合格”,但实际上并不能保证它。 Flash会在它认为合适时进行清理。

就个人而言,如果你能掌握Flash Builder,它有一个出色的内存管理分析工具,当你使用上面提到的OOP进行开发时,你可以使用这个工具来查看你游戏中存在的所有实例。现在,好的部分是你可以及时做一个内存快照,并比较它们以查看哪些对象徘徊并导致内存泄漏。有一个垃圾收集按钮,您应该在捕获快照之间调用,这仅在您开发时可用,但使用Adobe AIR可以手动强制执行gc调用。

关于你的奖金问题,我不确定你是如何做这个blitting的,如果你在舞台上添加对象这会增加记忆力,你无法避免这种情况。您所描述的1px厚度是Flash呈现的内容,您可以通过右键单击舞台并选择重绘区域选项来查看正在重绘的内容,以查看显示闪存必须重绘的红色框,它只会重绘所需的内容to,这对于检查您的帧速率是否有用非常有用。

总结一下:

考虑使用Flash CS6创建资产。

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

考虑使用Flash Builder(或免费的Flash Develop)进行开发。

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

我希望这对你的游戏有所帮助并祝你好运。