AS3 - 为什么类数组不能正常工作?

时间:2014-07-06 15:12:47

标签: arrays actionscript-3 class object

我有一个名为tOne的课程。类代码如下。

public class tOne extends MovieClip {
    private var _root:MovieClip;
    public var tPath:Array = new Array();

    public var index:int = 0;       

    public function tOne() {
        this.addEventListener(Event.ADDED, beginClass);
        this.addEventListener(Event.ENTER_FRAME, gameLoop);
    }

    private function beginClass(e:Event):void {
        _root = MovieClip(root);            
        tPath = _root.tMovingPath; //Sets the tPath array to a bunch of coordinates
    }

    private function gameLoop(e:Event):void {
        if (tPath[index] != null) {             
            this.x = tPath[index].xCoord;
            this.y = tPath[index].yCoord;
            tPath.splice(index, 1); //Here is the problem

            index++;
        }
    }
}

我创建了这个类的三个实例,所以我有3个tOne对象。现在我的问题是,当我使用&t; tPath.splice(index,1)'时,它不会从其中一个tOne对象中删除该索引,而是从所有三个对象中删除。

因此,如果在tOne的第一个对象中,我的数组长度为3并删除其中一个,则会从tOne的其他两个对象中删除一个。

我不明白为什么。

任何人都可以向我解释发生了什么吗?

1 个答案:

答案 0 :(得分:0)

在你的行

tPath = _root.tMovingPath;

您正在设置tPath以引用数组。所有三个对象的引用都将指向同一个数组。

您需要做的是制作该阵列的copy。一种方法:

tPath = _root.tMovingPath.concat();