Arrays 为什么当我更新一个二维数组时,它会给出一个;错误“1010”;

Arrays 为什么当我更新一个二维数组时,它会给出一个;错误“1010”;,arrays,actionscript-3,flash,random,actionscript,Arrays,Actionscript 3,Flash,Random,Actionscript,在我的编程课上 我需要用AS3创建一个Tiles游戏(比如zelda) 在地图上,瓷砖在数组中被初始化为黑色,之后,每当歌曲的leftpick达到某个值时,瓷砖都会随机变化 当磁贴更改时,我需要用新值更新数组。实际上,我总是会遇到一个错误#1010:一个术语没有定义,也没有属性。 以下是瓷砖的初始化方式: 变数 创建地图 那么,问题出在哪里?通常,使用此代码,每次更改磁贴时,应更新tMap中的良好磁贴 我做了一些测试,问题的根源似乎是tMap[posX][posY]=oneTiles.ge

在我的编程课上

我需要用AS3创建一个Tiles游戏(比如zelda)

在地图上,瓷砖在数组中被初始化为黑色,之后,每当歌曲的leftpick达到某个值时,瓷砖都会随机变化


当磁贴更改时,我需要用新值更新数组。实际上,我总是会遇到一个错误#1010:一个术语没有定义,也没有属性。
以下是瓷砖的初始化方式:

变数

创建地图

  • 那么,问题出在哪里?通常,使用此代码,每次更改磁贴时,应更新tMap中的良好磁贴
  • 我做了一些测试,问题的根源似乎是tMap[posX][posY]=oneTiles.getFrame()行不过,我还是不明白为什么

让我解释一下如何处理这类问题。一旦你知道某一行给你带来了麻烦,你就需要了解整个情况。您应该了解每个相关对象的当前状态和值,例如:

import flash.utils.getQualifiedClassName;

function hyperTrace(prefix:String, target:*):void
{
    trace("");
    trace("Name:", prefix);
    trace("Value:", target);
    trace("Type:", typeof(target));
    trace("Class:", getQualifiedClassName(target));
}
然后你开始学习:

// Expected result: instance of Tiles class
hyperTrace("oneTiles", oneTiles);

// Expected result: Function
hyperTrace("oneTiles.getFrame", oneTiles.getFrame);

// Expected result: Array
hyperTrace("tMap", tMap);

// Expected result: Array
hyperTrace("tMap[" + posX + "]", tMap[posX]);

// Expected result: int
hyperTrace("tMap[" + posX + "][" + posY + "]", tMap[posX][posY]);
然后,搜索与预期结果不匹配的结果。某些对象不是您期望的对象(包括posXposY索引的值),这是错误的来源。现在您已经了解了问题所在,您应该弄清楚以前的代码或开发逻辑到底出了什么问题,从而产生了意外的结果


如果不深入挖掘,我猜要么oneTiles没有定义,要么posXposY有错误的值,因此tMap[posX]没有定义。

让我解释一下如何处理这类问题。一旦你知道某一行给你带来了麻烦,你就需要了解整个情况。您应该了解每个相关对象的当前状态和值,例如:

import flash.utils.getQualifiedClassName;

function hyperTrace(prefix:String, target:*):void
{
    trace("");
    trace("Name:", prefix);
    trace("Value:", target);
    trace("Type:", typeof(target));
    trace("Class:", getQualifiedClassName(target));
}
然后你开始学习:

// Expected result: instance of Tiles class
hyperTrace("oneTiles", oneTiles);

// Expected result: Function
hyperTrace("oneTiles.getFrame", oneTiles.getFrame);

// Expected result: Array
hyperTrace("tMap", tMap);

// Expected result: Array
hyperTrace("tMap[" + posX + "]", tMap[posX]);

// Expected result: int
hyperTrace("tMap[" + posX + "][" + posY + "]", tMap[posX][posY]);
然后,搜索与预期结果不匹配的结果。某些对象不是您期望的对象(包括posXposY索引的值),这是错误的来源。现在您已经了解了问题所在,您应该弄清楚以前的代码或开发逻辑到底出了什么问题,从而产生了意外的结果


如果不深入挖掘,我猜要么是oneTiles没有定义,要么是posXposY有错误的值,因此tMap[posX]没有定义。

你几乎应该发布一个一般性的“我如何在AS3中调试?”提问并回答如下:)@Brian过去有文档部分,但删除了它(可能它不起作用)。我认为,如果作者在提问之前先学习算法和调试,这里的大部分问题都将消失。你几乎应该发布一个一般性的“我如何在AS3中调试?”问题,并用以下内容回答:)@Brian The used to have Documentation部分,但删除了它(可能这不符合其目的)。我认为,如果作者在提问之前先学习算法和调试,这里的大部分问题都将消失。
            private var posX: uint = 0; //global
            private var posY: uint = 0; //global

            tMap[posX][posY] = oneTiles.getFrame();

            if(posX == 11 && posY != 5){
                posX = 0;
                posY++;
            }else if(posX == 11 && posY == 5){
                posX = 0;
                posY = 0;
            }else{
                posX++;
            }
            trace(posX);
            trace(posY);

        }
public function getFrame():void{
            this.currentFrame;
    }
import flash.utils.getQualifiedClassName;

function hyperTrace(prefix:String, target:*):void
{
    trace("");
    trace("Name:", prefix);
    trace("Value:", target);
    trace("Type:", typeof(target));
    trace("Class:", getQualifiedClassName(target));
}
// Expected result: instance of Tiles class
hyperTrace("oneTiles", oneTiles);

// Expected result: Function
hyperTrace("oneTiles.getFrame", oneTiles.getFrame);

// Expected result: Array
hyperTrace("tMap", tMap);

// Expected result: Array
hyperTrace("tMap[" + posX + "]", tMap[posX]);

// Expected result: int
hyperTrace("tMap[" + posX + "][" + posY + "]", tMap[posX][posY]);