PDA

Просмотр полной версии : вытащить переменную из цикла


ogonek
18.07.2008, 09:09
здравствуйте)

у меня в одном файле есть динамический текст, который меняется, в зависимости от того какая кнопка нажата



var adressArray:Array = new Array()
adressArray[1] = "мама мыла раму мылом"
adressArray[2] = "ммммм"
adressArray[3] = "мама мыла раму мылом\n мама мыла раму мылом\n мама мыла раму мылом\n мама мыла раму мылом\n "


for (var i:Number = 1; i<63; i++) {
mc = target_mc["button"+i]

mc.i = i
mc.onRelease = function():Void {
adress.text=adressArray[this.i];

};
}


мне необходимо знать textHeight этого текста каждый раз чтоб в случае, если он большой, делать прокрутку.

но, разумеется, если выводить


trace(adress.textHeight);

за пределами всей этой операции, он не определяется.

как вытащить переменные данные из цикла? :umnik2:

исходник с вариантом попроще реального прилагаю.

ogonek
18.07.2008, 13:12
ну или каким образом можно устроить прокрутку динамическому тексту если у него не постоянное содержание а переменное?

chingachgoog
18.07.2008, 13:20
А что мешает сделать так:

mc.onRelease = function():Void {
adress.text=adressArray[this.i];
trace(adress.textHeight);
};

Возможно правда придется сделать задержку в кадр...

ogonek
18.07.2008, 13:32
ну как что мешает?
мне вообще-то надо ее не трейсить а использовать на стороне.
если задать например
h=adress.textHeight;

и вовыводить ее где вы сказали, h будет изменяться.

а за пределами цикла - если к ней обратится - undefunded


посмотрите мой пример, пожалуйста...

там если h больше какого-то числа, должен проигрываться мувик.

chingachgoog
18.07.2008, 14:15
В вашем примере я вообще кода не нашел, к тому же он на CS3 сделан, а это не есть удобно для многих.

Потом не понятно. Текст ведь появляется только при клике на кнопку? Соответственно и прокрутка должна появляться тогда же. А что вы желаете увидеть без клика на кнопку? Разумеется будет undefunded, т.к. более нигде adress не задан и без клика он не инициализирован.

ogonek
18.07.2008, 14:39
в моем примере код - на первом кадре
сохранила по-другому.
еще прилагаю собственно сам файл.
конечно, при клике на кнопку!
если трейс выполняется в цикле - при клике на кнопку выводится высота текста
если не в цикле неважно тут же за всеми скобками или на другом кадре мувике (при правильном адресе) - ничего не происходит)

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

точно так же как разумеется если за пределами цикла трейсить сам adress.text значения не будет потому что оно не заданно.

ogonek
18.07.2008, 15:03
то есть вопрос по сути в том - как запомнить эти переменные данные и пользоваться ими?

chingachgoog
18.07.2008, 15:06
Вы не поняли:

for (var i = 1; i<63; i++) {
mc = target_mc["button"+i]
mc.i = i
mc.onRelease = function():Void {
adress.text=adressArray[this.i];
h=adress.textHeight;
trace(h); // Это не трейс в цикле! Это трейс по клику.
};
}

trace(h); // undefined - переменная h еще нигде не определена

По этой же причине не срабатывает проверка

if(h>20)

ogonek
18.07.2008, 15:13
я правда не понимаю))
я же нажимаю на кнопку)
но ничего не происходит)

вы извините, я не очень хорошо понимаю что такое циклы массивы функции.

но что-то мне подсказывает что за пределом этого кода h рано нулю...

у вас при нажатии на кнопку что же, выводятся числа??

ogonek
18.07.2008, 15:14
я не права была в объяснениях, действительно..
снаала андефайндед, потом числа - а если обращаться\выводить h в другом месте - ничего.

Wolsh
18.07.2008, 15:19
ogonek, mc.onRelease - это обработчик события, но это также функция, которая сохраняется в собственных свойствах мувика под ником mc подобно тому как сохраняется mc.i = i. Весь этот блок кода не будет выполнен в цикле, он только сохранится в памяти как свойство mc и будет выполнен при событии mc.onRelease.
Trace в данном случае использован только чтобы показать, что в этом месте переменная доступна, и доступна по такому-то обращению. Ни в каком другом месте Вы не можете узнать textHeight потому что это свойство текстового поля С ТЕКСТОМ, нет текста - нет и высоты этого текста. Т.е. сначала присваиваем строку свойству text, а потом уже смотрим свойство textHeight, как здесь и сделано.

chingachgoog
18.07.2008, 15:28
моя_переменная="начальное значение"
onMouseDown=function(){
// тело функции будет выполнено только после ее активации
моя_переменная="конечное значение"
trace(моя_переменная)
}
// функция еще не активирована
trace(моя_переменная)

ogonek
18.07.2008, 19:27
о, спасибо!!!

мы почти разобрались!!