4

我们尝试开发具有多个抽象层的 Flash 游戏引擎。这个弹性项目包含:

一个应用程序 (1)-> 加载一个类 (2)-> 加载另一个类 (3),它实例化了一个 Flex 组件 (4)。

加载使用 SWFLoader。最后一个 Flex 组件 (4) 只是一个带有 AdvancedDataGrid 的组。我们没有定义皮肤,所以我想它必须采用默认皮肤。

问题是在执行过程中,由于在 Flex 组件中找不到组件的默认皮肤(4)而引发错误。在我们的例子中,对于 AdvancedDataGrid:

Error #1007: Instantiation attempted on a non-constructor.

mx.controls::AdvancedDataGridBaseEx.

有罪的命令是:getStyle("headerSeparatorSkin");它返回 null

目前,我们找到了两种解决方案:

  • 第一个解决方案是将属性添加headerSeparatorSkin="spark.skins.SparkSkin"到 Flex 组件的 AdvancedDataGrid 中 (4)。但这意味着我必须为组件的每个部分手动添加每个皮肤,这是一个非常无聊的解决方案。

  • 第二种解决方案是在第一个应用程序 (1) 中创建一个 AdvancedDataGrid。我想它将 AdvancedDataGrid 添加到编译和链接过程中。然而,这个解决方案并不好,因为应用程序 (1) 必须知道 Flex 组件 (4) 使用了哪些 UIComponent。

我们尝试了编译器选项“keep-all-type-selectors=true”(像这样),但没有任何改变。

那么,是否有人可以强制编译器在子应用程序中显式链接 Flex 组件和他的皮肤?

4

2 回答 2

6

根据Flexmaniak.pl,它可以通过添加-keep-all-styles-selectorsflex 编译器参数来解决。

Flex 4.5.1 的正确语法是-keep-all-type-selectors

于 2011-05-11T07:55:38.827 回答
1

在将我的所有 Flex 库都包含为运行时共享库​​ (RSL) 时,我遇到了这个问题。我将编译器选项中的框架链接更改为“合并到代码中”,并且 getStyle("headerSeparatorSkin") 不再返回 null。不确定这对您来说是否可行,但至少它会给您一个提示。

于 2010-11-01T06:33:26.983 回答