如何在 Flash 中为 MovieClip 分配属性并在 Flex 中访问它们?

Posted

技术标签:

【中文标题】如何在 Flash 中为 MovieClip 分配属性并在 Flex 中访问它们?【英文标题】:How to assign properties to a MovieClip in Flash and have them accessible in Flex? 【发布时间】:2011-07-05 08:35:02 【问题描述】:

情况/问题

情况是这样的。

在 Flash Professional 中,我有一个 MovieClip,并且该剪辑有子级。假设父剪辑是夜空,子剪辑是循环动画的明星影片剪辑的不同实例。整个事情编译成一个 NightSky.swc,我在 Flash Builder 中使用它作为一个更大项目的一部分。

在 Flash Pro 中,我以高精度定位子剪辑。从那里,我想为这些“星星”分配属性。比如说,我想分配“galaxyId”和“isRedGiant”但是(这是关键)我想在 Flash Professional 中编辑这些属性并让这些值在 Flex 中可访问.我该怎么做?

示例

例如,使用 Flash Pro,我在天空中放置了 6 颗星星,给它们全部的星系 ID 为“MilkyWay”,并指定其中 3 颗为红巨星。然后,我编译 SWC 并转到 flex。在 Flex (Flash Builder) 中,我有一些类似的逻辑:

public function showRedPulse():void 
    //psuedo-code just as an example:
    for each Child in the Night Sky
       if Child is in the Milky Way
           and if Child is a Red Giant
               Then, gotoAndPlay("redPulse")

所以基本上,我需要访问 Flex 中的属性,但我需要在 Flash 中设置它们。

以前的解决方案

好的。所以我在 CS4 中已经做了大约 2 年了,但是在 CS5 中,它非常有问题。所以我正在寻找一种新的方法。我之前所做的是创建一个 ActionScript 类(扩展 UIMovieClip)并将 Inspectable 元标记添加到我需要在 Flash 中看到的字段中,如下所示:

private var _galaxyId:String;

[Inspectable(name="galaxyId", type=String, defaultValue="MilkyWay")]
public function set galaxyId(value:String):void 
     _galaxyId = value;

然后,在 Flash Professional 中,我会让“明星”使用 actionscript 类作为它的基类。然后,我将右键单击库中的星形并编辑它的组件定义,将其指向同一个类。一旦我这样做了,所有可检查的属性都会显示在 Flash 的组件检查器中。

总结

多年来,我以前的方法效果很好。现在,在 CS5 中,它非常有问题,只在某些时候工作!我完全陷入困境,无法继续我的项目,我正在考虑完全放弃 Flash Pro,转而尝试 Flash Catalyst。

我只需要在 Flash 中创建可以在 Flex 中使用的对象(3.6 而不是 Flex 4)。我需要这些 Flash 对象具有可以在 Flash 中编辑并在 Flex 代码中访问的属性。

我还能如何解决这个问题?这不应该那么难。

【问题讨论】:

目前还没有 Flex 3.6,是吗? 3.5 是最新的“黄金”版本。 您是否尝试过在 MovieClip 的 frame1 中添加帧动作并在那里设置变量值?你可以省略元标记,只创建普通的公共 setter 和 getter。 @Flextras:我当然希望有 3.6,我们已经使用了大约 14 个月。大声笑(如果我没记错的话,我们的一些代码在 3.5 下也不起作用)最新版本是 3.6.0.16736,它来自每晚构建。所以我猜官方的回答是“是和不是”。 【参考方案1】:

在元件属性中,为影片剪辑创建一个新类,然后在其中声明您的属性。只要您正在导入 swc,Flex 就会看到该属性并且是类型安全的。

那里没有太多好的文档,这是我能找到的最好的: http://www.adobe.com/devnet/flash/articles/concept_base_class.html

【讨论】:

我发现 CS5 中有一个错误。当我有机会作为可能的解决方法时,我会尝试你的解决方案......【参考方案2】:

原来,CS5 中有一个与使用组件相关的细微错误。

Flash CS5 + components as children in UIMovieClips = fail.

保存为 CS4 文件时完全相同的文件可以零修改工作。

所以这个问题的“答案”是前面的解决方案是正确的方法。在 CS5 中解决这个奇怪的错误可能需要一些时间。据我所知,Adobe 已经意识到了这个问题。

【讨论】:

以上是关于如何在 Flash 中为 MovieClip 分配属性并在 Flex 中访问它们?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Flash 中的类中命名 Movieclip 中的 Movieclip?

如何获取动态创建的 Flash 舞台上的 MovieClip 名称?

如何在 Adob​​e Flash CS3 中移动 MovieClip 的原点?

如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?

在 Flash 中为用户数据分配内存(STM32F4 HAL)

离开关键帧并返回时,Flash 舞台上的 MovieClip 不会重新实例化