1

我正在开发一个使用 Flash Professional 和 Flash Builder 的项目。美术团队在 Flash Pro 中创建资产并将项目发布为 SWC。然后我将 SWC 复制到我的 Flash Builder 项目的 lib 目录中并通过它访问资产。

美术团队正在创作很多相同类型的东西;假设他们正在制作很多蜥蜴符号/组件。所有这些蜥蜴都有相似的动画(walk_left、walk_right 等),因此它们都在 ActionScript 中定义了与动画中的关键帧相关的常量(WALK_RIGHT_START、WALK_RIGHT_END 等)。

从 Flex 的角度来看,无论我加载哪个 Lizard,我都希望能够告诉它向左走。所以我在 Flash Professional 中创建了一个超类,现在 Flash Professional 中蜥蜴的所有 AS 类都扩展了这个类 - Lizard.as

这一切都很好,但是当我想为我的蜥蜴添加更多复杂性时,我不想打开 Flash Pro 项目,编辑类,重新编译 SWC,将其发送回 Flex,然后测试一下。我希望能够在 Flex 中编辑我的 Lizard 超类 - 所以我在 Flex 中创建了另一个超类:Lizard.mxml

在 Flex 中,每个蜥蜴组件(如Gecko.mxml)当前都扩展了 Lizard.mxml,并且每个都包含在 SWC 中定义的 AS 组件(在本例中为Gecko.as)。

这看起来很复杂:一个扩展 mxml 超类的 mxml 组件,其中包含一个扩展 AS 超类的 AS 组件。

我想做的是在 Flex 项目中定义一个超类,让我的 Flash Pro 定义的组件扩展这个类(这是我认为不可能的部分),然后让我的 Flex 组件 (Gecko.mxml) 扩展这些。

有没有办法做到这一点?

4

1 回答 1

1

你不能改变一个类,你只能扩展它。

几年前,我正在从事一个项目,其中界面在 Flash 中完成并在 flex 编译器中编译。

我有不同的 ui 组件,它们由不同的类组成。但是对于我输入的逻辑,需要以同样的方式对待它们。这意味着所有类都必须具有相同的基类,而这必须是我自己的基类。因此 Button 和 List 都必须扩展 customUIClass。据我所知,你做不到(如果你正在阅读这篇文章并知道一种方法,请告诉我)

我的解决方案是创建一个包装器。

适用于您的问题将是这样的

  • 制作一个名为 Lizard(或动物、有机体等)的“超类”,它扩展了 MovieClip(或 casaMovieClip)。
  • 蜥蜴会有一个变量private var _view:MovieClip
  • 和一个初始化构造函数'init($type:MovieClip)`(不是实际的构造函数)
  • 您在哪里_view=$type添加视图addChild(_view);

然后你会像这样创建你的动作

function walk():void{
   _view.gotoAndPlay("WALK");
} 

最后一件事是创建 Gecko 类,它将扩展 Lizard,并将其作为构造函数

function Gecko(){
   init(new flaGecko());
}

那么如果您仍然需要覆盖任何功能,您可以这样做

或者你可以只创建var gecko:Lizard = new Lizard(new flaGecko());,但你需要 init() 作为构造函数。

如需进一步阅读,请查看装饰器设计模式。我发现AS3 设计模式书很有帮助。

于 2011-02-04T20:50:42.353 回答