上一个阵列MC位置

时间:2009-10-12 08:02:58

标签: actionscript-3

我基本上是在尝试创建一个树形图。我创建了第一级,我想把它放到一个数组中,这样下一级就能从前一级/数组中获取属性。

但现在好像我不能用自己独特的“名字”将圈子推入circlesNewArray。这有什么问题?

我仍然不确定我为最大2分离的动态intance / data / mc构造我的代码的方式是否正确,因为我认为它涉及2到3个数组,以便在数据时将其保持在同一级别之间加载,并在进行电平分离时再次重新组合。

如果您有任何更好的想法,也会非常感激。感谢名单!

私有函数dataLevel():void {

        rootLevel=new Array();
        rootLevel.push(20,200);

        newArray=new Array();

        var no1:Number=1;
        var no2:Number=2;

        if (rootLevel is Array==true) {
            createBranch(rootLevel);


            for (var j:Number=0; j<rootLevel.length; j++) {
                newArray[j]=new Array();
                newArray[j].push(j);
                createBranch(newArray[j]);
            }
        }
    }


    //-------------------------------------------------------------------


    private function createBranch(runningObj:Object):void {

        circlesNewArray = new Array();
        var i2=i-1;

        for (var i:Number=0; i<runningObj.length; i++) {

            circles = new MovieClip();
            var empty=null;
            circles.graphics.beginFill(0xFF2222);
            circles.graphics.drawCircle(empty,empty,10);
            circles.graphics.endFill();

            //Passing 2 cirls in an Array
            circlesNewArray[i]=new Array();
            circles.name="circles"+i;

            circlesNewArray[i].push(circles[i]);

            if (runningObj==rootLevel) {
                circles.x=trunks.x - (Math.floor(Math.random()*100)-50);
                circles.y=trunks.y - (Math.floor(Math.random()*100));
            } else if (runningObj!=rootLevel) {
                circles.x=circlesNewArray[i2]-(Math.floor(Math.random()*100)-50);
                circles.y=circlesNewArray[i2]-(Math.floor(Math.random()*100));
            }

            //trace(circles.x, circles.y);

            circles.buttonMode=true;
            circles.addEventListener(MouseEvent.CLICK, clickTarget);

            addChild(circles);
        }
    }

1 个答案:

答案 0 :(得分:1)

您在声明之前访问变量i。因此i2将被分配NaN。不幸的是,编译器忽略了这种错误。在flash中,方法的所有局部变量,无论您在代码中何处声明它们,都在方法的开头声明,但只有在代码到达相应的执行行时才会为它们分配值。

var i2=i-1;//value of i and hence that of i2 is NaN.
for (var i:Number=0; i<runningObj.length; i++)

由于i2NaN,访问circlesNewArray[i2]的调用失败。如果您希望i2具有值(i-1),请在for循环内调用i2 = i - 1;

不过,你想用这行代码做什么?

circles.x=circlesNewArray[i2]-(Math.floor(Math.random()*100)-50);

您是将数组推入circlesNewArray然后以数字形式访问它们吗?