无法引用嵌套数组

时间:2010-10-06 22:35:43

标签: flash

var orb_strip:Array = new Array();
var orb_strip_matrix:Array = new Array(orb_strip);

public function OrbArray() //constructor.
{      
   for (var a:uint = 0; a < orb_strip_row_size; a++) 
   {

   //one for loop create an array of movieClips and draws them on the stage in a row. 

      for (var i:uint = 0; i < orb_strip_size; i ++) 
      {
         var orb:Orb = new Orb();

         // all the properties of each orb are created.

         orb.x = (i*50);
         orb.y = (a*100);
         orb.alpha = 0.3;
         orb.orbText.text = ("orb" + i);
         orb.label = "blank";
         orb.type = "speak";
         orb.mouseChildren = false; //?
         // more event listners but this time for each orb.
         orb.addEventListener(MouseEvent.MOUSE_OVER, orbMouseOver);
         orb.addEventListener(MouseEvent.CLICK, orbClick);
         orb.addEventListener(MouseEvent.MOUSE_OUT, orbMouseOut);

         orb_strip.push(orb); // an orb is born!
         addChild(orb);
      }

      orb_strip_matrix.push(orb_strip);

   }

orb_strip_matrix[1][3].alpha = 0.9;

}

这是问题,它只引用数组顶部或0行的orbs。

这嵌套在另一个for循环中,该循环创建了movieClip行的数组。问题我看到它们在舞台上正确绘制和定位但我不能引用除顶行之外的其他任何内容以便更改alpha例如。我已经找到了一个解决方案,但无法找到任何以这种方式尝试的示例,因此得出结论嵌套for循环是错误的方法吗?任何想法都很受欢迎。

1 个答案:

答案 0 :(得分:0)

我没有运行你的代码,所以我看不出为什么Array访问不起作用,说实话,看起来应该是这样!

但是,我有几个问题,为什么你需要在两个阵列中都有你的球体,为什么你需要在阵列中使用它们,你将能够作为孩子们访问它们他们坐在DisplayObjectContainer

关于两个for循环,而不是嵌套它们,做一个循环,并使用modulo算法来构建Orbs网格,(modulo会包含一系列数字,例如,时钟包裹24小时。)

例如:

var orb_strip = new Array();

public function OrbArray() {
    var orbHorizontalSpacing:int = 50;
    var orbVerticalSpacing:int = 100;
    var orbRowSize:int = 10;
    var orbColumnSize:int = 10;
    var totalNumberOfOrbs:int = orbRowSize * orbColumnSize;

    for (var i:uint = 0; i < totalNumberOfOrbs; i ++) 
    {
        var orb:Orb = new Orb();
        // derive x from modulo totalNumberOfOrbs index (i) by orbRowSize.
        orb.x = (i%orbRowSize * orbHorizontalSpacing); 
        // derive y from totalNumberOfOrbs index (i) by orbColumnSize
        orb.y = (Math.floor(i / orbColumnSize) * orbVerticalSpacing);

        orb.alpha = 0.3;
        orb.orbText.text = ("orb" + i ); // i is now 0 to totalNumberOfOrbs
        orb.label = "blank";
        orb.type = "speak";
        orb.mouseChildren = false;

        orb.addEventListener(MouseEvent.MOUSE_OVER, orbMouseOver);
        orb.addEventListener(MouseEvent.CLICK, orbClick);
        orb.addEventListener(MouseEvent.MOUSE_OUT, orbMouseOut);

        orb_strip.push(orb); // an orb is born!
        addChild(orb);
    }
}

如果你觉得你确实需要它,那还包括数组。

更新

我建议您使用模数来确定Orb是否在行的开头或结尾,而不是2D数组......

但是关于为什么数组访问不起作用,嗯,这将教会我不要仔细查看原始代码。您只在类级别创建了一个orb_strip数组,每行需要一个数组。