PDA

Просмотр полной версии : Проблема с Dynamic Text


re17
30.03.2007, 10:58
Во флеш разбираюсь плохо. Весь ваш форум перерыл, но не нашел видимо потому что проблема очень простая. Проблема такая

Создаю мувик (new_2words), в котором присутствуют еще два Graphic Symbol (называются new_1_1 и new_1_2), они перемещаются при помощи Motion Tweening. Каждый из этих Graphic Symbol имеет внутри поле Dynamic Text с переменными w1 и w2.

Я вытаскиваю в первый кадр мувик new_2words, называю его new_mc и в Action Script первого кадра(мне нужно прописывать именно в первом кадре, а не внутрикажжого мувика) прописываю

new_mc.w1.text = "Двухлитровый";
new_mc.w2.text = "двигатель";

И первая переменная считывается нормально , в вторая ( и последующие) не считывается. То есть слово "Двухлитровый" воспроизводится, а двигатель нет. В чем может быть дело?

CorC
30.03.2007, 11:23
упрощенный пример положите
может с именами попутали

re17
30.03.2007, 11:31
пример прилагаю

может быть это можно как то проще сделать, но проще не получается.

цель всего этого сделать так, чтобы я мог задавать в скрипте переменные например "Двухлитровый" и "двигатель", или "Литые" и "диски", и запускать один и тот же мувик из ActionScripta (как это сделать я пока тоже не знаю), а не создавать отдельный мувик для каждого словосочетания.

FourSide
30.03.2007, 11:33
В приложенном примере во втором мувике отсутствует Instance имя текстового поля. Я назвал его w2 и всё заработало.

re17
30.03.2007, 11:55
FourSide, точно, спасибо.

У кого есть время, подскажите пожалуйста, как реализовать вот это:
"цель всего этого сделать так, чтобы я мог задавать в скрипте переменные например "Двухлитровый" и "двигатель", или "Литые" и "диски", и запускать один и тот же мувик из ActionScripta (как это сделать я пока тоже не знаю), а не создавать отдельный мувик для каждого словосочетания."

Алгоритм примерно такой:

Есть массив myarray[][], где myarray[1][1] = "Двухлитровый", myarray[1][2] = "двигатель", myarray[2][1] = "Литые" и так далее.

for (i=1; i<5; i++) {
Создаем копию клипа, и размещаем ее в определенных координатах. // не знаю какую функуцию лучше использовать
присваиваем w1 = myarray[цикл][1]; // не знаю запуст
w2 = myarray[цикл][2];
Удаляем клип // если нужно
}

В последнем кадре нашего основного клипа, который мы клонируем ставим stop();

etc
30.03.2007, 12:41
re17, оформите код в своем посте соответствующими форумными тегами.

re17
30.03.2007, 12:53
var myarray = new Array;
myarray[0] = ["Двухлитровый", "двигатель"];
myarray[1] = ["Литые", "диски"];
myarray[2] = ["ABS", "+EBD"];
myarray[3] = ["Гидроусилитель", "руля"];
myarray[4] = ["Автоматический", "кондиционер"];


for (i=0; i<5; i++) {

Создать клип "mc_word"+i с заданными координатами

"mc_word"+i.w1.text = myarray[i][0]; //
"mc_word"+i.w2.text = myarray[i][1];

Удалить клип, если нужно

}

Проблемы в коде
1. Не знаю как лучше создать клип.
2. Не знаю как, правильно склеить "mc_word"+i
3. Нужно ли удалять клип после того как он закончил играть?
4. Как сделать чтобы они играли один за другим, а не все вместе?

etc
30.03.2007, 13:17
re17, кнопка http://flasher.ru/forum/images/russian/style3/buttons/edit.gif справа вверху от каждого поста.

CorC
30.03.2007, 13:24
Создать клип "mc_word"+i с заданными координатами

"mc_word"+i.w1.text = myarray[i][0]; //
"mc_word"+i.w2.text = myarray[i][1];

Удалить клип, если нужно

}


mc=this.attachMovie(<linkage клипа в библиотеке>,"mc_word"+i, this.getNextHighestDepth());

mc.w1.text = myarray[i][0]; //
mc.w2.text = myarray[i][1];

this["mc_word"+i].removeMovieClip();

re17
30.03.2007, 14:30
почему то не работает, может кто-нибудь подправит файл?

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

CorC
30.03.2007, 15:00
1. linkage мувика а не имя! ПКМ-linckage на мувике в библиотеке
2.

mc=this.attachMovie("word1","mc_word"+i, this.getNextHighestDepth());

3. зачем remove тут же написал ? :) он же сразу и удалится

re17
30.03.2007, 15:29
CorC, спасибо!

1. Linkage я поставил.
2. Поправил
3. Remove - убрал

в результате получилось:

var myarray = new Array;
myarray[0] = ["Двухлитровый", "двигатель"];
myarray[1] = ["Литые", "диски"];
myarray[2] = ["ABS", "+EBD"];
myarray[3] = ["Гидроусилитель", "руля"];
myarray[4] = ["Автоматический", "кондиционер"];

for (i=0; i<5; i++) {
mc=this.attachMovie("word1","mc_word"+i, this.getNextHighestDepth());
mc._x = 400;
mc._y = 100;
mc.w1.text = myarray[0][0];
mc.w2.text = myarray[0][1];

mc.gotoAndPlay(1);

//this["mc_word"+i].removeMovieClip();
}


но у меня только первый ролик проигрывается и встает. А последующие не идут.

CorC
30.03.2007, 15:32
... = myarray[i][0];
... = myarray[i][1];


//mc.gotoAndPlay(1); не надо...

re17
30.03.2007, 16:09
CorC, опять прошу прощения.

У меня несклько вопросов:
1. Какая именно функция запускает ролик? ведь gotoAndPlay я убрал.
2. если ролик запускает функция attachMovie, то почему переменные указанные ниже задействованы?
3. Как сделать так чтобы все запускалось не одновременно, а ролики следовали один за другим?

CorC
30.03.2007, 16:11
1 он сам будет играться после аттача
2 какие переменные? :) из массива
ну дак можно во время ролика что угодно с ним делать...
3 setInterval тут поможет, про нее спрашивать не тут
а в хелпе или в поиске...

re17
30.03.2007, 17:28
CorC, провозился 2 часа, но так и не понял куда нужно вствить SetInterval, чтобы была необходимая задержка. Подскажите, если не трудно, новую тему заводить не хочется.

CorC
30.03.2007, 17:43
stop();
var myarray = new Array();
myarray[0] = ["Двухлитровый", "двигатель"];
myarray[1] = ["Литые", "диски"];
myarray[2] = ["ABS", "+EBD"];
myarray[3] = ["Гидроусилитель", "руля"];
myarray[4] = ["Автоматический", "кондиционер"];
var i = -1;
aaa = setInterval(function () {
_root["mc_word"+i].removeMovieClip();
i++;
if (i == 5) {
clearInterval(aaa);
} else {
mc = _root.attachMovie("word1", "mc_word"+i, _root.getNextHighestDepth());
mc._x = 100;
mc._x = 100;
mc.w1.text = myarray[i][0];
mc.w2.text = myarray[i][1];
}
}, 2000);

написал навскидку, за безобразие не ругать :)

re17
30.03.2007, 17:55
CorC, спасибо, все работает. Но от сложности этой задержки у меня уже мозги болят:). Почему во флеш нельзя сделать просто sleep(200); ?

и еще не совсем понял, а зачем нужен stop(); в начале?

CorC
30.03.2007, 17:58
"потому что гладиолус" :)
по моему дак нормально, или я просто привык :)

re17
31.03.2007, 11:41
Вы будете смеятся, но после того как я все сделал, то есть добавил в символы w1 и w2, нужные мне переходы, снова перестал отображаться w2.\

Первым делом я проверил подписана ли переменная. Оказалась подписана.

Пробовал добавлять еще один символ w3, однако в него тоже значение переменной не передается.

В чем может быть дело?

И еще небольшой вопрос. При текущей реализаии SetInterval происходит задержка в самом начале. Как от нее избавится?

re17
02.04.2007, 11:24
CorC, глянь пожалуйста, горю :).

PS/ Вопрос по поводу первой задержки SetInterval - решил.

CorC
02.04.2007, 11:48
получите распишитесь :)

re17
03.04.2007, 18:01
CorC, огромное спасибо, только сегодня до работы добрался. :)

а если можно, поясни пожалуйста, почему у меня в моем примере содержание 2-ой переменной в Dynamic Text не передавалось...