如何在 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 名称?
如何在 Adobe Flash CS3 中移动 MovieClip 的原点?
如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?