如何将 MovieClip 放入 3D 数组?

How can I put MovieClip into 3D array?

我想创建包含动画片段和文本字段的 3d 数组。这是我的代码:

public function init():void
{
    //initalize the arrays
    for (var _x:int = 0; _x <= MAX_X; _x++)
    {
        colArray = new Array();

        for (var _y:int = 0; _y <= MAX_Y; _y++)
        {
            textArray = new Array();

            for (var _z:int = 0; _z <= MAX_Z; _z++)
            {
                var txt:TextField = new TextField();
                textArray.push(txt);
            }
            var mc:MovieClip = new MovieClip();
            colArray.push(mc);
        }

        rowArray.push(colArray);
    }
}

public function addBoxes(isUpdate:Boolean):void
{
    for (var _y:int = 0; _y <= MAX_Y; _y++)
    {
        for (var _x:int = 0; _x <= MAX_X; _x++)
        {
            for (var _z:int = 0; _z <= MAX_Z; _z++)
            {
                // Create captions
                var mcCaption:MovieClip = createMc("captionBox", false);
                spSource.addChild(mcCaption);
                mcCaption.addEventListener(MouseEvent.MOUSE_DOWN, mcCaptionHandler);

                colArray[_x][_y][_z] = mcCaption;

                mcCaption.x = nextXpos;
                mcCaption.name = "beatCaption_" + _y;
                // trace(colArray[_x][_y][_z]);
            }
        }
    }
    ...
}

我想在我的影片剪辑中添加一些文字。我怎样才能做到这一点?我的代码出现错误:TypeError: Error #1010: A term is undefined and has no properties.

这个说法有错吗?
colArray[_x][_y][_z] = mcCaption; // mcCaption is a movieclip

你没有 3D 数组,因为最内层循环中的 textArray 没有被推入 colArray,而是你在其中填充了一个 MC。此外,您要求错误的数组来检索 3 深度对象。在您的代码中,rowArray 是 2D 数组(如果您在其中填充 textArray,则为 3D),colArray 是 MC 的一维数组,然后您尝试引用 colArray[_x][_y][_z] - 这个解析为:

  • colArray[_x] = 空 Movieclip,创建于 init()
  • colArray[_x][_y] = undefined(MC为空,没有属性 _y不管它的值
  • colArray[_x][_y][_z] = 运行时错误,您正在尝试查询未定义的属性。

所以,你必须检查一下你的 init() 是否写对了,因为如果你需要一个 3D 数组,你现在不会制作一个。我的猜测是:

public function init():void
{
    //initalize the arrays
    for (var _x:int = 0; _x <= MAX_X; _x++)
    {
        colArray = new Array();
        for (var _y:int = 0; _y <= MAX_Y; _y++)
        {
            textArray = new Array();
            for (var _z:int = 0; _z <= MAX_Z; _z++)
            {
                textArray.push(null); // placeholder
            }
            colArray.push(textArray);
        }
        rowArray.push(colArray);
    }
}

如果你使用rowArray[_x][_y][_z] = mcCaption;

,最内层循环中压入的null将被替换