2D Массив видеоклипов - Ошибка № 1006
Я все еще учусь кодировать в AS3, который кажется довольно простым и похожим на Java, поэтому я прошу прощения, если я где-то допустил глупую ошибку.
Что касается заголовка вопроса, я пытаюсь создать двумерный (вложенный) массив мувиклипа, который я уже создал, чтобы его можно было распечатать на сетке следующим образом.
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().
Любая помощь с благодарностью. Спасибо!
1 ответ
var GemMatrix:Array = new Array( 8, 8);
Это то, что у тебя есть. Это фактически создает одномерный массив, который является [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).