【问题标题】:AS3 - Error #1056: Cannot create property 0 on BooleanAS3 - 错误 #1056:无法在布尔值上创建属性 0
【发布时间】:2015-06-06 20:45:19
【问题描述】:

我需要创建多个动态数组,并且似乎在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]);
    }
}

但是,在测试站点提供的任何一个 sn-ps 时,我最终都会遇到错误 "#1056: Cannot create property 0 on Boolean."

Automatically declare stage instances”被选中。

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

【问题讨论】:

    标签: arrays actionscript-3 boolean


    【解决方案1】:

    从顶部删除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 循环结构,位于 sn-p 的底部。

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

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

    boolArray[row][col] = true

    其实是

    boolArray[row].0 = true

    boolArray[row]["0"] = true

    要解决这个问题,您应该参考实际的 2D 数组。

    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]);
        }
    }
    

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

    【讨论】:

    • 谢谢!我显然有很多关于数组的知识 - 我很欣赏逐步的解释。
    • 没问题。学习一些东西总是好的。确实是教程的“错误”,因为没有给出很好的解释并包含错误。
    【解决方案2】:

    你忘记注册行数组了。

    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 变量,它仍然应该“工作”,只是所有行都是相同的。
    • 感谢您的链接 - 几天来,我一直在努力学习如何正确使用数组,但事实证明,如何创建多维动态数组比预期的要复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2013-08-31
    • 1970-01-01
    • 2019-12-20
    • 2013-01-21
    相关资源
    最近更新 更多