Actionscript 3 复制/克隆载体。<;MovieClip>;

Actionscript 3 复制/克隆载体。<;MovieClip>;,actionscript-3,vector,duplicates,Actionscript 3,Vector,Duplicates,如何复制向量的内容 private var slotMC:MovieClip; private var slotV1:Vector.<MovieClip> = new Vector.<MovieClip>(); private var slotV2:Vector.<MovieClip>; private var slotV3:Vector.<MovieClip>; public function InputSlot

如何复制向量的内容

private var slotMC:MovieClip;
    private var slotV1:Vector.<MovieClip> = new Vector.<MovieClip>();
    private var slotV2:Vector.<MovieClip>;
    private var slotV3:Vector.<MovieClip>;

    public function InputSlot():void {
        registerClassAlias("MovieClip", MovieClip);
        for (var i:int = 1; i < typeAmount + 1; i++) {                      
            SlotClass = Main.queue.getLoader('main_uiMC').getClass('slot0' + i) as Class;
            slotMC = new SlotClass();
            slotMC.name = "slot" + i;

            //push to vector before randomly add to stage
            slotV1.push(slotMC);
        }

        slotV2 = clone(slotV1);
        trace('slotv2', slotV2);
    }

    private function clone(source:Vector.<MovieClip>):Vector.<MovieClip> {  
        var myBA:ByteArray = new ByteArray();
        myBA.writeObject(source);
        myBA.position = 0;

        return myBA.readObject() as Vector.<MovieClip>;
    }
private var slotMC:MovieClip;
专用变量slotV1:Vector.=新向量();
私有变量slotV2:向量。;
私有变量slotV3:向量。;
公用函数InputSlot():void{
注册分类别名(“MovieClip”,MovieClip);
对于(变量i:int=1;i
对于slotV2,它返回null。 或者在这种情况下,多维向量是更好的方法吗?
不过,我不确定将来会在MC中添加哪些其他信息。

除非对象的类实现了
IExternalizable
,否则无法深度克隆任何类型的
DisplayObject
的向量。这是因为深入克隆一个
DisplayObject
需要克隆它的所有引用,包括整个子列表和阶段,并且您不能创建另一个阶段。因此,您最好通过在循环中创建更多的
SlotClass
实例并将它们填充到相应的向量中来创建“深度克隆”

for (var i:int = 1; i < typeAmount + 1; i++) {                      
        SlotClass = Main.queue.getLoader('main_uiMC').getClass('slot0' + i) as Class;
        slotMC = new SlotClass();
        // slotMC.name = "slot" + i; 
        // drop name setting, you'd better use position in vector to refer to the clip

        //push to vector before randomly add to stage
        slotV1.push(slotMC);
        slotMC = new SlotClass();
        slotV2.push(slotMC);
        slotMC = new SlotClass();
        slotV3.push(slotMC);
    }
for(var i:int=1;i
在运行循环之前,不要忘记初始化向量


作为补充,是的,考虑到为什么需要这几个向量,使用多维向量可能更好。

您需要深度克隆(即第一个向量中MCs的副本)还是浅层克隆(仅复制链接,不创建更多MCs)?3个插槽都需要将MC添加到后台,因此我认为这是深度克隆?