加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AS3中的duplicateMovieClip的替代

发布时间:2020-12-15 07:13:15 所属栏目:百科 来源:网络整理
导读:基本思路就是对对象属性值的拷贝。由于AS2和AS3中的MovieClip属性有改变了,所以有些属性需要通过赋值实现(如transform,这个属性中包括了对象的x,y属性等),别的(如width等)通过重新调用其构造函数实现即可。 ? package tang {? ? ?? ? ? ?? import flas

基本思路就是对对象属性值的拷贝。由于AS2和AS3中的MovieClip属性有改变了,所以有些属性需要通过赋值实现(如transform,这个属性中包括了对象的x,y属性等),别的(如width等)通过重新调用其构造函数实现即可。
?
package tang {? ? ??
? ? ?? import flash.display.MovieClip;
? ? ?? import flash.geom.Rectangle;? ? ??
? ? ?? public class as2Utils{
? ? ?? ?public static function duplicateMovieClip(source:MovieClip,isAdd:Boolean = false):MovieClip?
{
? ? ?? ?? ?? ?//调用源对象类的构造函数
? ? ?? ?? ?var tclass:Class = Object(source).constructor;
? ? ?? ?? ?? ?var copy:MovieClip = new tclass();? ? ?? ?? ??
? ? ?? ?? ?? ?//对有差异的属性进行复制。
? ? ?? ?? ?? ?copy.transform = source.transform;
? ? ?? ?? ?? ?copy.filters = source.filters;
? ? ?? ?? ?? ?copy.cacheAsBitmap = source.cacheAsBitmap;
? ? ?? ?? ?? ?copy.opaqueBackground = source.opaqueBackground;
? ? ?? ?? ?? ?if (source.scale9Grid) {
? ? ?? ?? ?? ?? ?? ?var rect:Rectangle = source.scale9Grid;
? ? ?? ?? ?? ?? ?? ?//这个据说是flash9中scale9Grid的一个bug.
? ? ?? ?? ?? ?? ?? ?rect.x /= 20,rect.y /= 20,rect.width /= 20,rect.height /= 20;
? ? ?? ?? ?? ?? ?? ?copy.scale9Grid = rect;? ? ?? ?? ?? ?}
? ? ?? ?? ??
? ? ?? ?? ?? ?//是否自动添加到与源对象相同的父对象中。
? ? ?? ?? ?? ?if (isAdd && source.parent) {
? ? ?? ?? ?? ?? ?? ?source.parent.addChild(copy);
? ? ?? ?? ?? ?}
? ? ?? ?? ?? ?return copy;
? ? ?? ?}
}
}

这个类做好了,建一个FLA来测试。先在FLA中创建一MC元件,名为testObj,该MC中有一动态文本,做为标签使用。如图:

AS3中的duplicateMovieClip



然后在第1帧添加代码:
import tang.as2Utils;
var copy:MovieClip;
for(var i:int=1;i<=5;i++)
{
copy=as2Utils.duplicateMovieClip(testObj,true);
copy.x=(copy.width+5)*i;
copy.label.text=i.toString();
}
运行。这里有一个TypeError错误(由于copy.label产生)。舞台上看不到有怎么对象被复制了。如图:

AS3中的duplicateMovieClip




这是因为没有在库中给这个MC元件导出类。设置导出类之后,就可以看到效果了。(在库中的此元件的属性里勾选“为ActionScript导出”,类名可以用默认的,有个警告提示框,不用理会)。这时再运行,就可以看到结果了。
如图:

AS3中的duplicateMovieClip



扩展:
在AS3的舞台显示方面,不只是提供了MovieClip,还有不带时间轴的Sprite,这两个类是主要用于舞台显示的,上例只是实现了考贝MovieClip的功能,但要实现拷贝Sprite也是一样的道理的,因为MovieClip和Sprite都同继承于DisplayObject,只要把上例中的MovieClip类改成DisplayObject类来实现,则此duplicateMovieClip即可实现关于DisplayObject对象的拷贝。

记得原来在做FMS编程时,想通过ShareObject远程对象来传递自定义对象,就像是JAVA中使用的序列化/反序化般。但ShareObject支持的对象有限,并不支持自定义的类存储。当时也使用了类似这样拷贝的方法,将客户端的对象序列化成字符串后,再传到FMS端,再由FMS发布到各监听的客户端,在客户端再进行反序列为来还原自定义的类

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读