2

新手程序员在这里。

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

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

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

额外的问题:我正在使用全屏位图并在其上显示内容。如果我每帧将几十个对象blitting 到屏幕上,我就不需要担心被blitted 的“sprites”被“掩盖”,不是吗?我希望位图是一个像素厚,而不仅仅是将东西堆叠在一起。

4

1 回答 1

2

首先,您可以完全控制您的资源的唯一方法是,如果您将时间线保留为预期用途,以 swc 或 swf 格式创建和导出资产,您可以嵌入前者,然后嵌入或加载后者.

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

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

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

关于你的奖金问题,我不确定你是如何做这个 blitting 的,如果你在舞台上添加对象,这会增加内存,你无法避免这种情况。你所说的 1px 厚的是 flash 渲染的内容,你可以通过右键单击舞台并选择重绘区域选项来查看正在重绘的内容,看到一个红色框显示 flash 必须重绘的内容,它只会重绘它需要的内容到,这对于检查您的帧速率是否受到影响很有用。

所以总结一下:

考虑使用 Flash CS6 创建资源。

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

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

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

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

于 2013-01-25T09:41:41.933 回答