从库里动态加载元件的话,要先 new 一个元件实例,然后把它 addChild 到舞台显示容器中。
var temp = new myObject(); // myObject 为制作影片剪辑时候的链接属性
addChild(temp); //这样就添加了一个新的 myObject 对象的实例
很显然,如果是静态的直接从库里拖到舞台上,那么它肯定位于显示节点的底层。就是说,动态加载的元件实例要比舞台原有的元件实例,处于显示节点的上层,这很容易理解,一个是一开始就存在的,一个是 new 了以后加上去的。
加了 temp 之后可以给这个对象动态的增添属性,
比如: temp.createWay = "dynamic";
如果我们在 myObject 剪辑(实际上是一个可视化的类)中写脚本,如
trace(this.createWay );
那么,当temp被添加到显示列表时,flash会输出 "dynamic";
能够动态的增添属性带来诸多方便的同时,也有些令人困惑的地方
我测试的环境是一个嵌套的剪辑,相信大家都有过这样的做法
第一级的剪辑类名 Father;
第二级的剪辑类名 Son;
Father和Son里写入同样脚本:
trace(this.step)
制作Father的时候直接往里边拖一个Son实例,命名为 tson, 然后 tson.step = "son";
然后在舞台上拖一个建立好的Father实例,命名为 tfather, 然后 tfather.step = "father";
运行会有如下输出:
fasher
son
很正常的显示结果,下边我们做点改动。
不直接在舞台上添加Father实例,改用 new 的方法;
var tfather = new Father();
tfather.step = "father";
addChild(tfather);
运行输出如下:
undefined
father;
由此结果可以看出执行的顺序都变了,当都是静态的对象时,是一层一层的执行的,而改用 new 方法的时候,就不是一层一层的执行了,它是先运行 tson ,trace(this.step)的时候因为静态对象tson没有定义 this.step 所以undefined,然后到外层 trace(this.step),因为动态对象定义了临时属性 tfather.step, 所以输出father。
对于这种困惑的显示,我们再改动下。
在舞台中,添加
var tfather = new Father();
tfather.step = "father";
addChild(tfather);
不在Father剪辑中静态加入Son,也改用动态添加
var tson = new Son();
tson.step = "son";
addChild(tson);
运行会有如下输出:
fasher
son
于是我对 as3 中的 new 有点想法了。。。
var temp = new myObject(); // myObject 为制作影片剪辑时候的链接属性
addChild(temp); //这样就添加了一个新的 myObject 对象的实例
很显然,如果是静态的直接从库里拖到舞台上,那么它肯定位于显示节点的底层。就是说,动态加载的元件实例要比舞台原有的元件实例,处于显示节点的上层,这很容易理解,一个是一开始就存在的,一个是 new 了以后加上去的。
加了 temp 之后可以给这个对象动态的增添属性,
比如: temp.createWay = "dynamic";
如果我们在 myObject 剪辑(实际上是一个可视化的类)中写脚本,如
trace(this.createWay );
那么,当temp被添加到显示列表时,flash会输出 "dynamic";
能够动态的增添属性带来诸多方便的同时,也有些令人困惑的地方
我测试的环境是一个嵌套的剪辑,相信大家都有过这样的做法
第一级的剪辑类名 Father;
第二级的剪辑类名 Son;
Father和Son里写入同样脚本:
trace(this.step)
制作Father的时候直接往里边拖一个Son实例,命名为 tson, 然后 tson.step = "son";
然后在舞台上拖一个建立好的Father实例,命名为 tfather, 然后 tfather.step = "father";
运行会有如下输出:
fasher
son
很正常的显示结果,下边我们做点改动。
不直接在舞台上添加Father实例,改用 new 的方法;
var tfather = new Father();
tfather.step = "father";
addChild(tfather);
运行输出如下:
undefined
father;
由此结果可以看出执行的顺序都变了,当都是静态的对象时,是一层一层的执行的,而改用 new 方法的时候,就不是一层一层的执行了,它是先运行 tson ,trace(this.step)的时候因为静态对象tson没有定义 this.step 所以undefined,然后到外层 trace(this.step),因为动态对象定义了临时属性 tfather.step, 所以输出father。
对于这种困惑的显示,我们再改动下。
在舞台中,添加
var tfather = new Father();
tfather.step = "father";
addChild(tfather);
不在Father剪辑中静态加入Son,也改用动态添加
var tson = new Son();
tson.step = "son";
addChild(tson);
运行会有如下输出:
fasher
son
于是我对 as3 中的 new 有点想法了。。。