Просмотр полной версии : вытащить переменную из цикла
здравствуйте)
у меня в одном файле есть динамический текст, который меняется, в зависимости от того какая кнопка нажата
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:
исходник с вариантом попроще реального прилагаю.
ну или каким образом можно устроить прокрутку динамическому тексту если у него не постоянное содержание а переменное?
chingachgoog
18.07.2008, 13:20
А что мешает сделать так:
mc.onRelease = function():Void {
adress.text=adressArray[this.i];
trace(adress.textHeight);
};
Возможно правда придется сделать задержку в кадр...
ну как что мешает?
мне вообще-то надо ее не трейсить а использовать на стороне.
если задать например
h=adress.textHeight;
и вовыводить ее где вы сказали, h будет изменяться.
а за пределами цикла - если к ней обратится - undefunded
посмотрите мой пример, пожалуйста...
там если h больше какого-то числа, должен проигрываться мувик.
chingachgoog
18.07.2008, 14:15
В вашем примере я вообще кода не нашел, к тому же он на CS3 сделан, а это не есть удобно для многих.
Потом не понятно. Текст ведь появляется только при клике на кнопку? Соответственно и прокрутка должна появляться тогда же. А что вы желаете увидеть без клика на кнопку? Разумеется будет undefunded, т.к. более нигде adress не задан и без клика он не инициализирован.
в моем примере код - на первом кадре
сохранила по-другому.
еще прилагаю собственно сам файл.
конечно, при клике на кнопку!
если трейс выполняется в цикле - при клике на кнопку выводится высота текста
если не в цикле неважно тут же за всеми скобками или на другом кадре мувике (при правильном адресе) - ничего не происходит)
сам трейс не важен но и если заводить переменную и приравнивать ее значению этому - нигде к ней не обратится.
точно так же как разумеется если за пределами цикла трейсить сам adress.text значения не будет потому что оно не заданно.
то есть вопрос по сути в том - как запомнить эти переменные данные и пользоваться ими?
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)
я правда не понимаю))
я же нажимаю на кнопку)
но ничего не происходит)
вы извините, я не очень хорошо понимаю что такое циклы массивы функции.
но что-то мне подсказывает что за пределом этого кода h рано нулю...
у вас при нажатии на кнопку что же, выводятся числа??
я не права была в объяснениях, действительно..
снаала андефайндед, потом числа - а если обращаться\выводить h в другом месте - ничего.
ogonek, mc.onRelease - это обработчик события, но это также функция, которая сохраняется в собственных свойствах мувика под ником mc подобно тому как сохраняется mc.i = i. Весь этот блок кода не будет выполнен в цикле, он только сохранится в памяти как свойство mc и будет выполнен при событии mc.onRelease.
Trace в данном случае использован только чтобы показать, что в этом месте переменная доступна, и доступна по такому-то обращению. Ни в каком другом месте Вы не можете узнать textHeight потому что это свойство текстового поля С ТЕКСТОМ, нет текста - нет и высоты этого текста. Т.е. сначала присваиваем строку свойству text, а потом уже смотрим свойство textHeight, как здесь и сделано.
chingachgoog
18.07.2008, 15:28
моя_переменная="начальное значение"
onMouseDown=function(){
// тело функции будет выполнено только после ее активации
моя_переменная="конечное значение"
trace(моя_переменная)
}
// функция еще не активирована
trace(моя_переменная)
о, спасибо!!!
мы почти разобрались!!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.