在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 复制到的新 Vector 为空。
最佳答案
在将对象写入 ByteArray
之前,使用 flash.net.registerClassAlias
注册一个类别名,例如:
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 !
关于actionscript-3 - AS3 中矢量的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175810/