AS3: проблема адресации видеоклипов в массиве! - PullRequest
0 голосов
/ 28 мая 2011

Я использую циклы для создания сетки видеоклипов.Клипы хранятся в массиве tileArray.
Вот мой код:

//Spawn Checkers
var i:int = new int();
var j:int = new int();
var tileArray:Array = new Array();
for (i=0; i<22; i++)
{
    for (j=0; j<12; j++)
    {
        var tile:checker = new checker(i * 25 + 49,j * 25 + 40);
        stage.addChild(tile);
        tileArray.push(tile);
    }
}
//Activate Checkers (TEST)
var m:int = new int();
for (m=0; m<tileArray.length; m++)
{
    tileArray[m].gotoAndPlay(1);
}

Моя проблема в том, что когда выполняется секция кода //Activate Checkers (TEST), она не обращается к 0-му элементу.А именно первая плитка, созданная в позиции (49,40).Если я сделаю tileArray[0].gotoAndPlay(1);, это сработает, но по какой-то причине цикл for будет попадать на каждую плитку, но первый checker объект в tileArray.

e: при использовании trace(m); я вижу, что m действительно начинается с 0, но цикл не может выполнить tileArray[0].gotoAndPlay(1).Кроме того, если я помещу tileArray[0].gotoAndPlay(1); вне цикла и закомментирую цикл, ни одна из плиток не будет анимирована.tileArray[0].gotoAndPlay(1); не работает вне цикла, но работает внутри - кроме случаев, когда индекс массива является моей итеративной переменной.Очень странно.

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Когда мне нужно перебрать весь массив, я обычно использую синтаксис for / each:

for each (var tile:checker in tileArray) {
  tile.gotoAndPlay(1);
}

Это не объясняет странное поведение, с которым вы сталкиваетесь (я понятия не имею, я быначните смотреть на класс "checker", но это колеблется), но это может сделать его неуместным.

1 голос
/ 28 мая 2011

Вы можете немного упростить свой код, и это может решить проблему:

//avoid the use of the **new** statement (it initialise a bunch of stuff you dont need)
var i:int; 
var j:int;
var tileArray:Array = [];

for (i=0; i<22; i++)
{
    for (j=0; j<12; j++)
    {
        //** updated ** I forgot to add the [i] for index position
        tileArray[i] = new checker(i * 25 + 49,j * 25 + 40);
        addChild(tileArray[i]);
    }
}

//Activate Checkers (TEST)
var m:int;

for (m=0; m<tileArray.length; m++)
{
    tileArray[m].gotoAndPlay(1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...