Просмотр полной версии : Создание TextField в цикле
zhalexei
20.07.2006, 11:39
Ситуация вкратце такая: есть массив из n элементов. Для каждого элемента нужно создать СВОЙ TextField
for ( i = 0 ; i <= (n-1) ; i ++ ) {
myfieldName = myArray[i]
this.createTextField(myfieldName , 0 , 0 , 0 , myfieldwidth , 25 )
}такой вариант не проходит, потому что в таком случае создается n TextField'ов с одинаковым именем myfieldName, а мне надо в каждое поле прописывать текст, равный значению n-го элемента массива. Подскажите, пожалуйста как быть..
Смотри как изящно первая строчка пишетсяfor (i = 0; i < n; i++) {:p
По поводу сути вопроса. Имя myfieldName берется из массива myArray, что там запишешь, то в названии и получишь.
zhalexei
20.07.2006, 11:58
по мне так i <= (n-1) лучше.
не понял ответа. тот код который я привел создает n одинаковых полей с названием "myfieldName". так и называются. все N. проверял :)
по мне так i <= (n-1) лучшеЯ понял, вы злостный враг оптимизация :)
не понял ответа. тот код который я привел создает n одинаковых полей с названием "myfieldName". так и называются. все N. проверял :)Ах, да. У вас там глубина вечно нулевая, а надо уникальную.
n = 5;
myArray = ["txt0", "txt1", "txt2", "txt3", "txt4", "txt5"];
for (i = 0; i <= (n - 1); i++) {
myfieldName = myArray[i];
this.createTextField (myfieldName, i, 0, 0, myfieldwidth, 25);
}
zhalexei
20.07.2006, 12:37
пасиба, заработало.. а что такое в данном случае "глубина", так и не понял? :)
теперь правда другая проблема, вполне ожидаемая возникает:
myfieldName.text="mytext";
не работает. возникает ошибка
There is no property with the name 'text'
как присвоить текст новому полю?
по поводу for..
как бы объяснить.. исключительно, имхо, может и не прав.. при такой записи:
for ( i = 0 ; i <= (n-1) ; i++ ) { //строка 1
.......
} //строка 2
пройдя цикл в (n-1)-й раз прога не возращается на первую строку для проверки необходимости запускать цикл еще раз.
а при такой:
for ( i = 0 ; i < n ; i++ ) { //строка 1
.......
} //строка 2програма вернется на первую строку и убедится, что i стало равно n, а не (n-0.000001) к примеру
я не прав? :)
for (var i = 0; i < 6; i++) {
var myfieldName = 'txt'+i;
var tf = this.createTextField (myfieldName, i, 0, i*30, myfieldwidth, 25);
tf.text = 'Any text #'+i;
}
delete i;
delete tf;
delete myfieldName;
zhalexei
20.07.2006, 14:39
неа..так не работает..
zhalexei, обратите внимание как другие оформляют свой код в теги, при выкладывании на форум.
zhalexei
20.07.2006, 14:42
виноват, быстрым ответом просто пользуюсь.. :)
неа..так не работает..
n = 5;
myfieldwidth = 50;
myArray = ["txt0", "txt1", "txt2", "txt3", "txt4", "txt5"];
for (i = 0; i <= (n - 1); i++) {
myfieldName = myArray[i];
this.createTextField (myfieldName, i, 0, i * 25, myfieldwidth, 25);
this[myfieldName].text = i;
}
zhalexei
20.07.2006, 14:50
супер! так работает! спасибо!
а вот про глубину я просил поподробнее..
а что такое в данном случае "глубина"
неа..так не работает..
Оно не может не работать. В коде ошибок нет, ищи в других местах.
KidsKilla
20.07.2006, 15:59
а что такое в данном случае "глубина", так и не понял? :)
ртфм:
http://novemberain.com/livedocs/Help/ActionScriptLangRef/00001492.html
http://novemberain.com/livedocs/Help/ActionScriptLangRef/00001780.html
читеам хелп почаще, жмём F1 почаще...
теперь правда другая проблема, вполне ожидаемая возникает:
myfieldName.text="mytext";
не работает. возникает ошибка
There is no property with the name 'text'
как присвоить текст новому полю?
myfieldName это строка у неё нету параметра .text
а this[myfieldName] а это текстовое поле
по поводу for..
как бы объяснить.. исключительно, имхо, может и не прав.. при такой записи:
for ( i = 0 ; i <= (n-1) ; i++ ) { //строка 1
.......
} //строка 2
пройдя цикл в (n-1)-й раз прога не возращается на первую строку для проверки необходимости запускать цикл еще раз.
а при такой:
for ( i = 0 ; i < n ; i++ ) { //строка 1
.......
} //строка 2програма вернется на первую строку и убедится, что i стало равно n, а не (n-0.000001) к примеру
я не прав? :)
никто никуда не возвращается.
у тебя итерация идёт +1 (i++)
короче ты не прав.
zhalexei
20.07.2006, 16:09
не прав, уже все пересчитал на тему for..
__etc копировал твой код в точности, не работает
zhalexei
20.07.2006, 16:10
что за манера в хелп сразу отправлять? естесственно, хелп читал сразу. недопонял, поэтому и спросил..
не прав, уже все пересчитал на тему for..
__etc копировал твой код в точности, не работает
Что конкретно не работает? Я оставил переменную твою, myfieldwidth.
Если ты про неё забыл, то я тут непричём.
zhalexei
20.07.2006, 16:20
ну не настолько я туповат, чтоб переменную не убрать)) просто ничего не происходит, textfieldов с текстом не появляется
ну не настолько я туповат, чтоб переменную не убрать)) просто ничего не происходит, textfieldов с текстом не появляется
Не уверен.
Открываем чистый документ. В первом кадре пишем:
for (var i = 0; i < 6; i++) {
var myfieldName = 'txt'+i;
var tf = this.createTextField (myfieldName, i, 0, i*30, 40, 25);
tf.text = 'Any text #'+i;
}
delete i;
delete tf;
delete myfieldName;
(Я заменил переменную на число).
Всё работает! :rtfm:
KidsKilla
20.07.2006, 16:27
что за манера в хелп сразу отправлять? естесственно, хелп читал сразу. недопонял, поэтому и спросил..
нормалльная манера. если спрашивать настолько элементарные вопросы на форуме форум сдохнет. тем более я тебе дал конкретные статьи. читай, вникай.
может быть поможет:
текстовое поле это по сути тот же мувик. и глубина текстового поля это абсолютно то же самое что и глубина мувика, которую ты задаёшь при использовании .createEmptyMovieClip() .duplicateMovieClip() и .attachMovie(). некое подобие слоёв на таймлайне
ну поехали :) рассмотрим подробнее два кода с помощью flasm
первый
n = 5;
for (i = 0; i <= (n-1); i++) {}
и второй
n = 5;
for (i = 0; i < n; i++) {}
для первого получаем
constants 'n', 'i' // сохраняем константы в пуле
push 'n', 5 // кладем n и 5 в стек
setVariable // инициализация значение n = 5
push 'i', 0.0 // кладем i и 0 в стек
setVariable // инициализация значение i = 0
label1: // это начало цикла
push 'i' // кладем i в стек
getVariable // и берем ее значение
push 'n' // кладем в стек предельное значение, то есть 'n'...
getVariable // и берем ее значение, 5
push 1 // кладем в стек 1
subtract // вычитаем, n-1
greaterThan // вычисляет булево выражение i>4
not // инвертируем и получаем i<=4
not // опять инвертируем и получаем i>4
//// последние две строчки лишние явно
branchIfTrue label2 // если у нас в стеке значение true, то идем к концу цикла на label2
push 'i', 'i' // дважды в стек помещаем i
getVariable // и берем ее значение i=i
increment // увеличиваем значение на 1, стеке i+1
setVariable // берем значение i
branch label1 // переходим на начало цикла
label2: //
а для второго
constants 'n', 'i' // сохраняем константы в пуле
push 'n', 5 // кладем n и 5 в стек
setVariable // инициализация значение n = 5
push 'i', 0.0 // кладем i и 0 в стек
setVariable // инициализация значение i = 0
label1: // это начало цикла
push 'i' // кладем i в стек
getVariable // и берем ее значение
push 'n' // кладем в стек предельное значение, то есть 'n'...
getVariable // и берем ее значение, 5
lessThan // вычисляет булево выражение i<5
not // инвертируем и получаем i>=5
branchIfTrue label2 // если у нас в стеке значение true, то идем к концу цикла на label2
push 'i', 'i' // дважды в стек помещаем i
getVariable // и берем ее значение i=i
increment // увеличиваем значение на 1, стеке i+1
setVariable // берем значение i
branch label1 // переходим на начало цикла
label2:
Белым я выделил различия. И как видно ни какой разницы кроме как удлинения числа выполняемых команд, типа вычитания и двойного отрицания нет. А если двойное отрицание убрать, сгенерить байт код и вставить за место обычного кода, то получим тоже самое что и с ними.
zhalexei
20.07.2006, 16:31
я не прав, признался же :)
zhalexei
20.07.2006, 16:51
Открываем чистый документ. В первом кадре пишем:
возможно, различие в том, что я ТВОЙ кусок, как и остальное помещал в onClipEvent(load) {}. других отличий не было
текстовое поле это по сути тот же мувик. и глубина текстового поля это абсолютно то же самое что и глубина мувика, которую ты задаёшь при использовании .createEmptyMovieClip() .duplicateMovieClip() и .attachMovie(). некое подобие слоёв на таймлайне
все равно не понимаю почему в данной ситуации глубина оказывает такое влияние. объект вроде как создан. даже координаты у всех n объектов разные, почему нельзя их выводить..
Имя не главное, оно только дает возможность доступа к объекту, а вот на одной глубине два объекта существовать не могут.
Я могу создать 3 текстфилда с именем txt, один на глубине 2, второй на глубине 1, а третий на глубине 3.
И по имени txt я смогу обратиться только к тому который находится ниже всех, то есть к 1. Но если я его удалю, то сразу по этому имени получаю доступ к полю на глубине 2.
KidsKilla
20.07.2006, 16:55
все равно не понимаю почему в данной ситуации глубина оказывает такое влияние. объект вроде как создан. даже координаты у всех n объектов разные, почему нельзя их выводить..
вот чтобы не было таких вопросов читаем хелп... :rtfm:
zhalexei
20.07.2006, 17:03
вот чтобы не было таких вопросов читаем хелп... :rtfm:
Ты ВСЁ в хелпе понимал, впервые саясь за флэш?
Ты ВСЁ в хелпе понимал, впервые саясь за флэш?А что вам в хелпе не понятно? Конкретный момент какой?
KidsKilla
20.07.2006, 17:10
Ты ВСЁ в хелпе понимал, впервые саясь за флэш?
да. будешь продолжать за флейм заплюсуют.
кроме хелпа (на русском!) есть ещё море сайтов по теме.
zhalexei
20.07.2006, 18:08
я вот одного не понимаю. не считаешь нужным ответить на поставленный вопрос не отвечай. человек в другом месте будет искать. а с умным видом показывать пальцем на человека и говорит что он дурак не стоит. заканчиваем этот офф-топ
KidsKilla
20.07.2006, 18:31
я вот одного не понимаю. не считаешь нужным ответить на поставленный вопрос не отвечай. человек в другом месте будет искать. а с умным видом показывать пальцем на человека и говорит что он дурак не стоит. заканчиваем этот офф-топ
а вот это уже наглость говорить "не считаешь нужным ответить на поставленный вопрос не отвечай" когда ответ дан, дважды и в супер-пупер понятной форме.
zhalexei
20.07.2006, 18:43
я имел ввиду первый твой пост, которым ты послал меня...в хелп..
KidsKilla
20.07.2006, 18:45
по ссылкам всё прекрасно разжёвано.
закрываю этот бред.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.