AS3 - 错误 #1056:无法在布尔值上创建 属性 0

AS3 - Error #1056: Cannot create property 0 on Boolean

我需要创建多个动态数组,似乎已经在 https://jadendreamer.wordpress.com/2012/05/06/flash-as3-tutorial-how-to-create-2d-or-3d-dynamic-multi-dimensional-arrays/

找到了我所需要的

示例 1:

var multiDimensionalArray:Array = new Array();
var boolArray:Array;
var MAX_ROWS = 5;
var MAX_COLS = 5;

//initalize the arrays
for (var row = 0; row <= MAX_ROWS; row++)
{
    boolArray = new Array();    
    for (var col = 0; col <= MAX_COLS; col++){
        boolArray.push(false);
    }    
    multiDimensionalArray.push(boolArray);
}

//now we can set the values of the array as usual
for (var row = 0; row <= MAX_ROWS; row++)
{
    for (var col = 0; col <= MAX_COLS; col++){
        boolArray[row][col] = true;
        trace('boolArray ' + row + ',' + col + ' = ' + boolArray[row][col]);
    }
}

但是,在测试网站提供的任一片段时,我最终遇到错误 "#1056: Cannot create property 0 on Boolean."

"Automatically declare stage instances" 已选中。

我在这上面花了几个小时,我确信它很简单,但我不太明白。有什么建议吗?

您忘记注册行数组。

boolArray[row] = new Array();

例如,如果你想创建一个1*3的数组 代码如下。

var a:Array = new Array();
a[0] = new Array();
a[0][0] = '1';
a[0][1] = '2';
a[0][2] = '3';

要了解多维数组的基础知识,请单击here

从顶部删除 boolArray,目前您总是向二维数组添加相同的数组,我怀疑这是故意的。

var multiDimensionalArray:Array = new Array();
//var boolArray:Array; //remove this line
var MAX_ROWS = 5;
var MAX_COLS = 5;

//initalize the arrays
for (var row = 0; row <= MAX_ROWS; row++)
{
    var boolArray:Array = new Array(); //create a new Array here

    for (var col = 0; col <= MAX_COLS; col++)
        boolArray.push(false);
    }

    multiDimensionalArray.push(boolArray);
}

虽然这不能解决您的问题,但可以防止出现更多问题。

要解决您的问题,您需要查看片段底部的第二个 for 循环结构。

目前,您正在尝试访问 boolArray[row][col]。但是这个对象不是二维数组,而是一维数组。因此,您在索引 row 处获取对象,然后尝试更改名称为 col 的变量的值,即 0。如您所知,布尔值没有一个名为 0.

的变量

简单地说,你在这里做什么:

boolArray[row][col] = true

实际上是

boolArray[row].0 = true

boolArray[row]["0"] = true

要解决这个问题,你应该参考你实际的二维数组。

for (var row = 0; row <= MAX_ROWS; row++)
{
    for (var col = 0; col <= MAX_COLS; col++)
        multiDimensionalArray[row][col] = true;
        trace('multiDimensionalArray' + row + ',' + col + ' = ' + multiDimensionalArray[row][col]);
    }
}

一句话总结:你用错了数组对象。