我还在学习AS3中的代码,这看起来很简单,与Java类似,所以如果我在某个地方犯了一个愚蠢的错误,我会道歉。
根据问题标题,我正在尝试创建一个我已经创建的MovieClip的2D(嵌套)数组,以便它们可以在网格上打印出来,如下所示。
var NumCols:Number = 8;
var NumRows:Number = 8;
var ColWidth:Number = (stage.stageWidth-8)/NumCols;
var ColHeight:Number = (stage.stageWidth-8)/NumRows;
var GemMatrix:Array = new Array( 8, 8 );
var n = 1;
var SW:Number = stage.stageWidth;
var SH:Number = stage.stageHeight;
private function GJ_GenerateBoard(event:MouseEvent):void {
// Initialization...
for (var j = 0; j < NumRows; ++j)
{
GemMatrix[y] = [];
for (var i = 0; i < NumCols; ++i)
{
trace(i,j);
GemMatrix[i][j] = new Gem() as MovieClip;
this.addChild(GemMatrix[i][j]);
GemMatrix[i][j].x = i*ColWidth+ColWidth/2;
GemMatrix[i][j].y = j*ColHeight+ColHeight/2;
}
}
我收到的错误是:
ReferenceError: Error #1056: Cannot create property 0 on Number.
当我尝试创建一个新的Gem()实例时会发生这种情况。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
var GemMatrix:Array = new Array(8,8);
这就是你的意思。这实际上创建了一个1D数组,即[Number(8),Number(8)]。您不需要在AS3中定义数组的长度,以下是我将如何设置它:
var GemMatrix:Array = [];
for (var i:int = 0; i < NumCols; i++){
var $a:Array = [];
for (var m:int = 0; m < NumRows; m++){
var $gem:MovieClip = new Gem();
$gem.x = i*ColWidth+ColWidth/2;
$gem.y = j*ColHeight+ColHeight/2;
addChild($gem);
$a.push($gem);
}
GemMatrix.push($a);
}
此外,这一行很奇怪:GemMatrix [y] = [];这不是抛出错误的唯一原因是因为y是你当前正在扩展的类的动态属性,表示它的y位置(很可能是this.y = 0)。