PDA

Просмотр полной версии : Задать глобально значение ячейки массива


Сникерс
12.10.2009, 18:19
У меня есть массив

name_array[]

и объект

var visitors:LoadVars = new LoadVars();

на главной временной шкале. Я хотел создать двухмерный массив и задать значения ячеек при загрузке в

visitors()

данных.

visitors.onLoad = function() {
for (var i = 0; i<30; i++) {
name_array[i] = new Array();
for (var d = 0; d<8; d++) {
name_array[i][d] = attachMovie(...);
}
}
}

Только каждый новый массив и каждая новая ячейка создаются на то время, пока с ними работает функция. Я бы хотел создать этот двухмерный массив глобально. Я пробовал применять

_root

и

_global

, но всё получается точно так же.

Kuruki
12.10.2009, 18:38
Вы не правы, все новые элементы массива остаются при нем после выполнения функции

Сникерс
13.10.2009, 12:36
Нет, Kuruki, они правда удаляются оттуда. Во время работы функции их можно прочитать методом

trace()

, а после неё этот метод уже выводит "undefined".

Kuruki
13.10.2009, 14:16
Выложите исходник, желательно очищенный от всего неотносящегося к вопросу

CrazyFlasher
13.10.2009, 14:52
в каком месте объявляется name_array?

Сникерс
13.10.2009, 17:04
В самом начале кода, CrazyFlasher !

Kuruki
13.10.2009, 17:19
LoadVars.onLoad - асинхронная функция, вызывается после загрузки данных. Вы, скорее всего, трейсите массив до ее выполнения

Сникерс
13.10.2009, 20:43
Я проверяю ячейки его внутри обработчика

onLoad()

и после него, Kuruki. И внутри они доступны, а после обработчика они недоступны.

Kuruki
13.10.2009, 20:53
Может так понятнее будет..trace("before function");
visitors.onLoad = function() {

trace("function");

for (var i = 0; i<30; i++) {
name_array[i] = new Array();
for (var d = 0; d<8; d++) {
name_array[i][d] = attachMovie(...);
}
}
}
trace("after function");
скомпилируйте это код

Сникерс
13.10.2009, 22:31
Вот я использую

trace("function"); //Выводит _level0.(имя клипа)

и

trace("after function") //Выводит undefined

CrazyFlasher
13.10.2009, 22:39
идёт так:

trace("before function");
trace("after function");
trace("function");
//здесь массив получает объекты

Сникерс
13.10.2009, 23:31
После

trace("function");

массив получает объекты, CrazyFlasher ?

Kuruki
14.10.2009, 00:32
Строка function в окне output, говорит о том, что была вызвана функция visitors.onLoad, т.к. команда trace("function") находится именно в ней.
Трейсы в окне появляются с момента их вызова, сверху вниз в хронологическом порядке. Что у вас в окне output выводится? О чем вам это говорит?

CrazyFlasher
14.10.2009, 01:37
массив получает объекты, CrazyFlasher ?
да..вам же написали, что onLoad работает асинхронно...событие произойдёт, только когда загрузятся данные

Сникерс
14.10.2009, 12:49
Ничего себе! Это оказывается точно так и происходит. То есть output выводит

before function;
after function;
function;

Ну я думаю, что это говорит о том, что код после функции выполняется перед кодом самой функции. Да?

CrazyFlasher
14.10.2009, 12:53
блин...ну сколько можно разжёвывать...onLoad может произойти и через 10 секунд и через минуту и хоть когда...

btn.onPress

ведь срабатывает только когда вы тыкните на кнопку. Точно так же и другие обработчики событий срабатывают по какому-либо событию

Сникерс
14.10.2009, 13:07
Да, мне понятно! Только даже если проверять наличие ячеек массива в теле обработчика

onLoad()

output выводит

,,,,,

Только самый последний добавленный клип не удаляется. Я думаю, что те клипы, которые присоединились, удалились тогда, когда присоединился следующий клип. Это из-за этого в output запятые и между ними ничего нет (эти все ячейки пустые). А почему происходит так?

iNils
14.10.2009, 13:17
С глубинами чтонить не так сделали.

Сникерс
14.10.2009, 13:20
Спасибо, iNils! Именно с глубинами было не впорядке! Всем спасибо за помощь!