博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复制显示对象通用函数
阅读量:4106 次
发布时间:2019-05-25

本文共 3256 字,大约阅读时间需要 10 分钟。

as3的影片实例不再有duplicateMovieClip的方法,它建议你使用显示对象的类来创建一个新的实例,但是这和duplicateMovieClip不同,和attachMovie比较相象,为了能更好的在as3里使用duplicateMovieClip,可以考虑下面的函数
package com.senocular.display {                import flash.display.DisplayObject;        import flash.geom.Rectangle;                /**       * duplicateDisplayObject       * creates a duplicate of the DisplayObject passed.       * similar to duplicateMovieClip in AVM1       * @param target the display object to duplicate       * @param autoAdd if true, adds the duplicate to the display list       * in which target was located       * @return a duplicate instance of target       */        public function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {            // create duplicate (constructor in quotes to bypass strict mode)             var targetClass:Class = target["constructor"];          //或者 var targetClass:Class = Object(target).constructor;  package com.senocular.display {        import flash.display.DisplayObject;    import flash.geom.Rectangle;        /**     * duplicateDisplayObject     * creates a duplicate of the DisplayObject passed.     * similar to duplicateMovieClip in AVM1     * @param target the display object to duplicate     * @param autoAdd if true, adds the duplicate to the display list     * in which target was located     * @return a duplicate instance of target     */    public function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {        // create duplicate (constructor in quotes to bypass strict mode)        var targetClass:Class = target["constructor"];        //或者 var targetClass:Class = Object(target).constructor;         //以上两种写法均返回一份类定义对象的引用,我们可以直接通过这个引用来创建类的实例,如下:            var duplicate:DisplayObject = new targetClass();          // duplicate properties             duplicate.transform = target.transform;            duplicate.filters = target.filters;            duplicate.cacheAsBitmap = target.cacheAsBitmap;            duplicate.opaqueBackground = target.opaqueBackground;            if (target.scale9Grid) {                var rect:Rectangle = target.scale9Grid;                // Flash 9 bug where returned scale9Grid is 20x larger than assigned                 rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;                duplicate.scale9Grid = rect;            }                        // add to target parent's display list             // if autoAdd was provided as true             if (autoAdd && target.parent) {                target.parent.addChild(duplicate);            }            return duplicate;        }    }
从上面可以看出,这个函数保留了复制实例的全部信息(比如transformation, filters, chaching as bitmap等)。
提示:flash player 9有个bug,他不能正确的返回显示对象的scale9Grid 属性。
使用:
 
import com.senocular.display.duplicateDisplayObject;// create duplicate and assign to newInstance variable// using true for autoAdd automatically adds the newInstance// into the display list where myOldSprite is locatedvar newInstance:Sprite = duplicateDisplayObject(myOldSprite, true);newInstance.x += 100; // shift to see duplicate
这个函数无法复制使用画图函数生成的信息。通常显示对象的画图对象不能被复制,所以这个函数也没有办法复制显示对象的画图对象。
译自ActionScript 3 Tip of the Day
原文地址:http://www.kirupa.com/forum/showthread.php?p=1939827#post1939827

转载地址:http://lhjsi.baihongyu.com/

你可能感兴趣的文章
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>
杨辉三角
查看>>
冒泡排序法
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
16、Memento 备忘录模式
查看>>
Java基础篇(一)
查看>>
数据库
查看>>
mysql update与group by
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>