PDA

Просмотр полной версии : пропадают значения массива после onEnterFrame


FlashRus
11.09.2010, 01:15
var m:Array = new Array()
function loadtch() { //загрузка инф о точках и создание объекктов
var i:Number=0;
onEnterFrame = function() {
m[i]=attachMovie("tchnum","tchnum"+i,i)
if (i==1) {
delete onEnterFrame
}
i++;
trace(m)
}
i=0;
trace(m)
}


первый trace выводит
_level0.tchnum0
_level0.tchnum0,_level0.tchnum1

второй trace, что после onEnterFrame ничего не выводит. Куда деваются значения???

mooncar
11.09.2010, 01:21
Как не выводит?
Выводит. Пустую строку, то есть пустой пока массив, поскольку на момент второго трейса событие onEnterFrame еще не произошло:

здесь пустая строка, присмотритесь к выводу в output
_level0.tchnum0
_level0.tchnum0,_level0.tchnum1

А зачем все это делать через EnterFrame? Функцию в функции не стоит определять. Приаттачить мувики в цикле вас почему не устроит?

Вторая запись i=0 абсолютна бессмысленна, после первого же onEnterFrame тут i не будет равна нулю никогда. К тому же i видна только внутри loadtch и умирает, как только становится равной 1, поскольку onEnterFrame убивается, а loadtch уже отработана.

В общем, все не так. Что вы хотите получить?

FlashRus
11.09.2010, 01:34
Цикл мне не подойдёт.
Но как мне кажеться второй trace выполняется после завершения работы onEnterFrame...?

mooncar
11.09.2010, 01:36
Нет, до. С чего бы это? Порядок выполнения кода - почти мгновенно по сравнению с Fps.

А массив у вас живой остается.
Допишите ниже и убедитесь:
setTimeout(showArray, 1000);
function showArray ()
{
trace(m);
}

FlashRus
11.09.2010, 01:41
Спасибо, работает. А чем плох вызов onEnterFrame внутри функции?

mooncar
11.09.2010, 01:51
Косяки с видимостью. К ней никак нельзя будет обратиться снаружи общей функции, если возникнет необходимость.

FlashRus
11.09.2010, 01:52
Большое спасибо. Во всём разобрался.