Flash CS4 拒绝放手

我有一个 Flash 项目,它有许多源文件。我有一个使用率很高的课程,称为 “Jenine”。我最近(也许是无情地)将 Jenine 从一个名称空间重定位到另一个名称空间。我以为我们已经准备好了 - 我以为是时候了。新的 Jenine 在各个方面都更好 - 她失去了一些代码膨胀,使自己脱离了一些残余的类关系,并且终于回到了她心中一直秘密地知道的那个真正的命名空间。曾经属于。她属于自己的同类。

不幸的是,Flash 根本没有。也许它已经形成了一种依恋。也许它不希望 Jenine 脱钩。无论哪种方式,它都紧紧抓住了珍妮的旧版本。它拒绝继续前进。它忽略了她的(职能)电话。它试图忘记她的新公共界面。相反,它构造的 Jenine 的每个实例始终都是旧版本的副本,一直到其类路径:

var jenineInstance:Jenine = new Jenine();
trace( getQualifiedClassName(jenineInstance));
// Should print: com.newnamespace.subspace::Jenine
// Prints: com.oldnamespace.subspace::Jenine
// Ah, young love!

我们战斗了。我为自己所说的或所做的某些事情感到骄傲。最后,由于愤怒,我完全删除了 Jenine 的所有参考文献。她完全被系统清除了。我的光标落在 “空垃圾箱” 菜单选项上,例如棺材的冷盖。

我认为 Flash 无法恢复。直到今天,它仍然紧贴着珍妮的记忆。她那古老的,不完美的定义仍然像遗弃的鬼魂一样贯穿我的项目。每当我强迫 Flash 编译时,它仍然会把她深深地插入我的电影中,将她的定义像其他小神 rine 一样安放在其他生活类中。我想知道他们是否可以看到她。

Flash,我不再谈论了。我编写代码,然后对其进行编译。镇上有一个名叫 Summer 的新女孩,看上去和 Jenine 几乎一样,好像有人刚刚将她的源代码批发复制到了一个新类中一样,但是 Flash 并没有表现出任何兴趣。多数日子里,当它以为自己不在时,它只会四处张望,并在我的评论中写下不良的诗歌。

我希望没有其他人有过类似的经历,那只是 Flash 代码库中令人恐惧的黑暗泻湖中的一个奇异而痛苦的涟漪。有谁知道如何擦除编译器正在使用的缓存?

答案

Flash 仍然具有 ASO 文件,它是您的类的已编译字节码。在 Windows 上,您可以在此处查看 ASO 文件:

C:\Documents and Settings\username\Local Settings\Application Data\Adobe\Flash CS4\en\Configuration\Classes\aso

在 Mac 上,目录结构在/Users/username/Library/Application Support/


您可以手动删除这些文件,或者在 Flash 中可以选择 “ Control->Delete ASO files来删除它们。

尝试删除您的 ASO 文件。

ASO 文件是类文件的缓存编译版本。尽管在进行更改时,IDE 可以更好地释放旧的缓存,但是有时您必须手动删除它们。删除 ASO 文件:控制 > 删除 ASO 文件。

这也是 CS3 中引入的 “我没有看到我的更改,所以我没有添加跟踪现在一切正常” 错误的原因。

如果使用另一台计算机编译该怎么办?一个新安装的将是可爱的。希望您的机器不会嫉妒。

我发现一种相关的行为可能会有所帮助(听起来像是您的特定问题更严重):

Flash 通过查看时间戳检查源文件是否需要重新编译。如果其编译版本于源文件,它将重新编译。但是它不会检查编译版本是否是从相同的源文件生成的。

具体来说,如果您的动作脚本文件受版本控制,并且您还原了更改,则还原后的文件通常将具有较旧的时间戳,而 Flash 将忽略它。

另外,要使用新的命名空间类,您还可以

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()

您有几个 swf 文件吗?如果您的班级是在某一个瑞士法郎中导入的,则其他瑞士法郎也将使用相同版本的班级。在一个瑞士法郎中使用 * 进行一次旧导入就可以做到这一点。重新编译所有内容,然后查看是否可行。

使用grep模拟,找到字符串oldnamespaceJenine在你的整个项目文件夹里面的文件。然后,您将知道下一步该怎么做。