Graphics.copyFrom 这个API是从flash player10开始有的,以前我们要复制一个显示对象,那是不可以的,当然你可以说用 BitmapData.draw 这个方法,但是原本是矢量对象,被draw之后就变成了位图.这样不是很好的.flashplayer10刚出来的时候有关注过一些新特性,但是对这个没有这么在意.
今天在群里有人问深度复制的问题.我一开始还以为是数据的深度复制呢,就想把《AS 对象 深度复制》发给他,后一看是说显示对象的,大家都知道显示对象是不好复制的,必须得在特定的情况下,使用特定的方法来实现,而且限制多多,并不通用,甚至不可用.就比如上面有提到的用BitmapData.draw方法,而他的限制是生成的显示对象是位图.
OK,当然在Graphics.copyFrom方法出来后,又多了一条复制显示对象为矢量对象的途径,但是这个也是有限制的.
- 只能对MovieClip,Sprite,Shape这3种对象进行复制,而对于SimpleButton却无能为力.
- 只能对用AS代码绘制的部分绘制,而对在Flash 创作工具(Flash CS3,4,5等)里画的图形无能为力.
- 对于MovieClip的多帧不起作用.(原理请看第2条限制)
虽然说有这么多限制,但是依然可以做些简单的是复制。
function displayClone(display:DisplayObject):DisplayObject
{
// Shape 返回 Shape
if(display is Shape)
{
var shape:Shape = new Shape();
shape.graphics.copyFrom(shape.graphics);
return shape;
}
// Sprite, MovieClip 都返回Sprite
else if(display is Sprite)
{
var sp:Sprite = new Sprite();
sp.graphics.copyFrom(Sprite(display).graphics);
var len:int = Sprite(display).numChildren;
for(var i:int = 0; i < len; i++)
{
var d:DisplayObject = displayClone(Sprite(display).getChildAt(i));
if(d) sp.addChild(d);
}
return sp;
}
return null;
}
» 转载请注明来源:www.litefeel.com » 《Graphics.copyFrom 复制显示对象》
» 本文链接地址:https://www.litefeel.com/graphics-copyfrom/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/graphics-copyfrom/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
This post was last modified on 2019 年 03 月 04 日 00:44
View Comments (1)
你写的日志太专业了。外行人看不懂啊。