1

[编辑:短版——如果一个 SWC 的命名空间中的类比另一个少,你如何正确处理 SWC 文件中的命名空间冲突?]

我在 Flash Builder 中构建了一个相当大的 Flash 应用程序(因为在 Flash IDE 中进行编码/调试......不好),并且我有大量外部 SWC 文件链接到我的应用。到目前为止效果很好 - 文件大小偏大,但它比加载 SWF 简单得多,特别是因为我正在扩展每个 SWC 中的大多数类并以这种方式添加自定义代码(这是一个非常设计 -繁重的应用程序。)我遇到的问题是当我在多个 SWC 中拥有 Flash 组件(如 ComboBox 或 TextInput)时。最后编译的任何 SWC 都可以正常工作,但其他 SWC 将失败并出现如下错误:

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::MovieClip@1f21adc1 to fl.controls.TextInput.
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at flash.display::MovieClip()
    at com.company.design.login::LoginForm()
    at com.company.view::Login()[/Users/ken/Workspace/src/com/company/view/Login.as:22]
    at com.company.view::Main/showLogin()[/Users/ken/Workspace/src/com/company/view/Main.as:209]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at com.company.view::Navigation/handleUIClick()[/Users/ken/Workspace/src/com/company/view/Navigation.as:88]

我一直在研究组件、ComponentShim 等,但我正碰壁。我认为这可能是因为某些组件的皮肤在源 FLA 中进行了修改,所以我尝试用默认皮肤替换它们,但这似乎没有帮助。如何确保我的组件已导入并可供我的所有类使用,但仍然能够对它们进行蒙皮并将它们包含在我的各种 FLA 中?(我从不创建它们的新实例,它们都是由我的设计师设计的。)

4

2 回答 2

1

我不知道这是否会对您有所帮助,但我在 SWC 库中的一个资产上遇到了类似的问题,它是我主项目中一个类的可视化表示。我最终做的是让视觉资产成为一个 Flash 创建的类,该类在我的项目中扩展了该类,而不是具有相同的名称。

例如,我的资产和课程都是 com.blah.TitleBackground。为了解决这个问题,我使视觉资产具有 com.blah.TitleBackgroundAsset 类,并将组件的基类设置为 com.blah.TitleBackground。这为我解决了这个特殊问题。我还有更多工作要做,但是您的帖子引发了解决名称冲突的解决方案的想法。

于 2010-04-09T15:29:50.757 回答
1

我找不到详细的修复(显然,我当时使用的工作电子邮件在我不知情的情况下丢弃了旧邮件!)但简短的答案是创建一个 FLA,其中包含您要使用的所有组件,设置这些组件(和 ComponentShim)“导出以供运行时共享”。然后,在您的其他 FLA 中,只要您需要一个组件,就将其从组件 FLA 库中拖动(它应该显示在您的主库中,并打开“导入以供运行时共享”。)确保您没有 ComponentShim你的主图书馆。您需要将已编译的组件 SWF 文件放在与 FLA 相同的文件夹中。

这样做的目的是将包括皮肤在内的所有组件代码保存在一个中心位置,因此当您编译时(无论是作为 SWF 还是 SWC,虽然这个问题主要在使用 SWC 时出现),所以不会发生冲突。

于 2010-10-14T03:30:06.533 回答