3

AS3 では、次の 2 つの方法で配列をコピーできます。

newArr = oldArr.concat();

また

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

しかし、これらの 2 つの方法は、複雑なデータ型のベクターをコピーする必要がある場合、ベクターでは機能しません。ByteArrayVector.<Point>を使用して複雑なデータ型のベクターをコピーすると、コンパイラーは新しいベクターを古いものをコピーすると言います。無効です。

4

2 に答える 2

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);

このブログ投稿に感謝します!

于 2012-04-16T14:32:22.853 に答える
0

別のオプションは.map()、次のようなものを使用することです。

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

var newVector:Vector.<Point> = oldVector.map(pointCloner);
于 2012-04-16T14:54:06.780 に答える