在Flex中使用Flash作成的SWC的文章很多了,本文对实际遇到的一些问题,给出方案。
1、在Flash中作3个图元(长方形):A、B、C,其中C包含了A和B。
2、将A、B、C分别生成Flex组件:
在“命令”菜单中,选择“将元件转换为Flex组件”,这时“库面板”中会出现“名称”和“链接”两列,在
其中“名称”列中给Flash用的,“链接”列是给Flex用的。
3、在C的第一帧中加代码,如下:
var a1:A = new A();
a1.name = "myA";addChild(a1);var b1:B = new B();
b1.name = "myB";addChild(b1);a1.x = 40;
a1.y = 140;b1.x = 140;b1.y = 150;使用代码方式,定义A,B的目的是,这样生成的SWC中的组件的name属性,是我们指定的,如”myA“。如果在舞台上直接把A、B拖拽到C上,那么会由系统自动成生name值,如instance1,instance2等,将来在Flex中不方便通过name属性找到我们要用的组件。
只定义了A,B还不行,这时在Flex中整个C(包括其中的A,B)都不能显示(原因不明),对策:在舞台上,拖放一个图元(A),将它的宽高设为0,或者画个其他图形也可以。这样在Flex中就能看到C和其中的A、B了。
4、在Flex中使用代码如下:
var myC:C = new C();
addChild(myC);
var me:DisplayObject;
var tmp:MoveClip = myC as MovieClip;
for(var i:uint = 0; i < tmp.numChildren; i++) { me = c.getChildAt( i ); //或者通过名称取得指定的对象,如下://me = c.getChildByName("myA");
if (me is MovieClip) {trace(“找到了:” + me.name); //此时输出 “找到了:myA”
} }5、改进方法
在Flash中不用代码定义图元A、B,直接在舞台上拖拽到C中,也可以在Flex中访问A和B,方法见下篇文章。