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

textArray最も内側のサイクルでは押し込まれずcolArray、代わりに MC をそこに詰め込むため、3D 配列はありません。また、3 深度オブジェクトを取得するために間違った配列を要求しています。コードには2D配列(そこにrowArray詰め込むと3Dになります)、 MCの1D配列があり、参照しようとしています-これは次のように解決されます:textArraycolArraycolArray[_x][_y][_z]

  • colArray[_x] = で作成された空のムービークリップinit()
  • colArray[_x][_y] = 未定義 (MC は空で、_yその値に関係なくプロパティはありません
  • colArray[_x][_y][_z] = 実行時エラー、undefined のプロパティをクエリしようとしています。

したがって、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);
    }
}

最もnull内側のループにプッシュされた s は、使用すると置き換えられますrowArray[_x][_y][_z] = mcCaption;

于 2015-01-23T12:25:31.197 に答える