AS3中矢量的深拷贝

时间:2012-04-16 14:14:34

标签: actionscript-3 vector

在AS3中,我们可以通过两种方式复制Array:

newArr = oldArr.concat();

var ba:ByteArray = new ByteArray();
ba.writeObject(oldArr);
ba.position = 0;
newArr = ba.readObject() as Array;

但是当我需要复制具有复杂数据类型的Vector时,这两种方式不能与Vector一起使用。就像Vector.<Point>。当我使用ByteArray复制具有复杂数据类型的Vector时,编译器说新的Vector我将旧的复制到null。

2 个答案:

答案 0 :(得分:3)

在将对象写入flash.net.registerClassAlias之前,请使用ByteArray注册类别名,例如:

var points:Vector.<Point> = new Vector.<Point>();
var pointsCloned:Vector.<Point>;
var ba:ByteArray = new ByteArray();

registerClassAlias("flash.geom.Point", Point);

points.push(new Point(1, 2));
points.push(new Point(3, 4));
points.push(new Point(5, 6));

ba.writeObject(points);
ba.position = 0;
pointsCloned = ba.readObject() as Vector.<Point>;

trace(points);
trace(pointsCloned);

感谢blog post

答案 1 :(得分:0)

另一种选择是使用.map(),例如:

function pointCloner(item:Point, index:int, vector:Vector.<Point>):Point {
    return item.clone();
}

var newVector:Vector.<Point> = oldVector.map(pointCloner);