在as3中,sprite是引用类型,所以不能直接赋值到另一个sprite。。
这里创建一个方法将sprite复制到另一个sprite方法就ok了
package UTIL
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.IGraphicsData;
import flash.display.MovieClip;
import flash.display.Shape;
import flash.display.Sprite;
public class DuplicateDisplayObject extends Sprite{
public function DuplicateDisplayObject()
{
}
public function copy(resource:DisplayObject):void {
var graphics:Graphics;
if (resource is Shape) {
graphics = Shape(resource).graphics;
}
else {
if (resource is MovieClip) {
drawClip(MovieClip(resource));
}
else if (resource is Sprite) {
graphics = Sprite(resource).graphics;
}
else {
if (!internalBitmapContent) {
internalBitmapContent = new Bitmap();
}
if (internalBitmapContent.bitmapData) {
internalBitmapContent.bitmapData.dispose();
}
internalBitmapContent.bitmapData = getDrawContent(resource);
this.addChild(internalBitmapContent);
}
}
if (graphics) {
graphicsDataVect = graphics.readGraphicsData(true);
if (!graphicsShape) {
graphicsShape = new Shape();
}
graphicsShape.graphics.clear();
graphicsShape.graphics.drawGraphicsData(graphicsDataVect);
this.addChild(graphicsShape);
}
}
private function drawClip(mc:MovieClip):void {
if (!clipVect) {
clipVect = new Vector.<Shape>();
}
clipVect.length = 0;
var s:Shape, graphicsDataVect:Vector.<IGraphicsData>;
for (var i:int = 1; i <= mc.totalFrames; i ++) {
mc.gotoAndStop(i);
s = new Shape();
s.visible = false;
graphicsDataVect = mc.graphics.readGraphicsData(true);
s.graphics.drawGraphicsData(graphicsDataVect);
clipVect[i - 1] = s;
this.addChild(s);
}
clipVect[0].visible = true;
}
private function getDrawContent(content:DisplayObject):BitmapData {
var d:BitmapData = new BitmapData(content.width, content.height, true, 0);
d.draw(content);
return d;
}
private var internalBitmapContent:Bitmap;
private var graphicsDataVect:Vector.<IGraphicsData>;
private var graphicsShape:Shape;
private var clipVect:Vector.<Shape>;
}
}
调用:
<pre name="code" class="java">var copyObj:DuplicateDisplayObject = new DuplicateDisplayObject();
copyObj.copy(_buttonObj[id].sprite);
addChild(copyObj)