如何将MovieClip放入3D阵列?

时间:2015-01-23 11:47:05

标签: actionscript-3 flash flash-cc

我想创建一个包含动画片段和文本字段的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

1 个答案:

答案 0 :(得分:1)

你没有3D数组,因为最里面循环中的textArray没有被推入colArray,而是你在那里填充了一个MC。此外,您要求一个错误的数组来检索一个3深度的对象。在您的代码rowArray中是二维数组(如果你在那里填充textArray将是3D),colArray是一维MC的数组,然后你试图引用{{ 1}} - 这个解析为:

  • colArray [_x] =空的Movieclip,在colArray[_x][_y][_z]
  • 创建
  • colArray [_x] [_ y] =未定义(MC为空,没有属性init(),无论其值是多少
  • colArray [_x] [_ y] [_ z] =运行时错误,您正在尝试查询未定义的属性。

所以,你必须检查你的_y是否写得正确,因为如果你需要一个3D阵列,你现在就没有。我猜是这样的:

init()

如果您使用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); } }

,那么在最里面的循环中推送的null将被替换