2012-05-06 24 views
0

我仍然学习在AS3中编写代码,这看起来非常直截了当,类似于Java,所以如果我在某处犯了一个愚蠢的错误,我很抱歉。二维数组电影剪辑 - 错误#1006

根据问题标题,我试图创建一个我已经创建的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. 

这发生在当我试图创建一个新的宝石()实例行。

任何帮助,非常感谢。谢谢!

+0

发布您的代码为您的'Gem'类(或至少其被调用的构造函数)。如果错误在那一行,它可能发生在'Gem()'调用内部,因为我认为该行没有其他错误。 –

回答

0

var GemMatrix:Array = new Array(8,8);

这是什么让你。这实际上创建了一个[Number(8),Number(8)]的1D数组。你并不需要定义在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)。

+0

谢谢!我也使用过这种方法。 – fantom