本文共 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; } }
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
转载地址:http://lhjsi.baihongyu.com/