0

我想创建包含影片剪辑和文本字段的 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

4

1 回答 1

1

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

  • colArray[_x] = 空影片剪辑,创建于init()
  • _ycolArray[_x][_y] = undefined(MC为空,无论其值如何,都没有属性
  • 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);
    }
}

如果您使用,在最内层循环中推送的nulls 将被替换rowArray[_x][_y][_z] = mcCaption;

于 2015-01-23T12:25:31.197 回答