actionscript-3 - AS3 中矢量的深拷贝

标签 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 复制到的新 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/

相关文章:

actionscript-3 - 如何在 ActionScript 3 的 NetConnection 上捕获和/或处理 "Error #2030: End of file was encountered"?

actionscript-3 - AS3自定义对象到ByteArray,然后到自定义对象

r - 如何判断一个向量中的内容而不是另一个向量中的内容?

java - 如何将Java代码转换成Matlab

c++ - 构建 vector 时如何去除(一个)不必要的拷贝?

arrays - AS3 : AddChild based on Array Value

actionscript-3 - 我应该关闭()声音,还是停止() channel ? (AS3)

flash - 将方法添加到 as3 类

C++11/14 将 std::uint32 转换为 std::vector<std::uint8>

c++ - 为什么for循环没有停止?