我基本上是在尝试创建一个树形图。我创建了第一级,我想把它放到一个数组中,这样下一级就能从前一级/数组中获取属性。
但现在好像我不能用自己独特的“名字”将圈子推入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);
}
}
答案 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++)
由于i2
为NaN
,访问circlesNewArray[i2]
的调用失败。如果您希望i2
具有值(i-1),请在for循环内调用i2 = i - 1;
。
circles.x=circlesNewArray[i2]-(Math.floor(Math.random()*100)-50);
您是将数组推入circlesNewArray
然后以数字形式访问它们吗?