2012-05-06 14 views
0

私はまだAS3のコードを学習していますが、これはかなり単純でJavaに似ていますので、どこか愚かな間違いを犯した場合はお詫びします。2次元配列のムービークリップ - エラー#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