PDA

Просмотр полной версии : attachMovie и затем запуск?


sy555
06.08.2009, 19:03
Добрый день!.

Как добавить клип на сцену и затем запустить его ?


on(press) //по нажатию добавляем клип
{
if( flag_con==true)
{
if(_root.but.attachMovie("con", "contakts1", this.getNextHighestDepth(), {_x:100, _y:100}))
{
_root.but.contakts1.gotoAndPlay(3);
flag_con=false;
}
}
else
{
trace("buzy");
}

}


Так не работает, клип добавляет но запускает его не успевает?

Zik.
06.08.2009, 19:31
var flag:Boolean = true;
but1.onPress = function():Void {
if (flag) {
mc = _root.but.attachMovie("con", "contakts1", this.getNextHighestDepth(), {_x:100, _y:100})
mc.gotoAndPlay(3);
flag = false;
} else {
trace("buzy");
}
}

Xero201
06.08.2009, 19:36
Присоединяюсь к вопросу. Этот attachMovie вообще какой-то неуловимый Джо(.
Пока в таких случаях пользуюсь чем-то вроде:
interval=10;//время в милисекундах (по ситуации и вкусу)
idd=setInterval(
function () {
if(_root.but.contakts1 != undefined){
clearInterval(idd);
_root.but.contakts1.gotoAndPlay(3);
flag_con=false;
}
}
,interval);

Поэтому тоже не прочь узнать граммотное решение

to ZIK68:
дело не в том, что код записан не "по-научному", а в том, что команда "mc.gotoAndPlay(3);" происходит раньше чем выполняется attachMovie(), хоть мне кто-то и говорил что аттач - последовательная процедура.

Zik.
06.08.2009, 19:49
протестил свой код - все работает отлично.

Xero201
06.08.2009, 20:23
протестил свой код - все работает отлично.
Хм..
Ну если не затруднит, то протестируй, пожалуйста и мой пример.
Есть клип (clip_mc) с одним кадром. В этом кадре есть переменная (id=1).
Сразу после добавления клипа (attachMovie), производиться попытка считать это самое id = выводит undefined. Когда тоже самое делается при нажатии на клип - все хорошо.
В чем дело?

Zik.
06.08.2009, 20:40
Ну... у меня таких проблем не бывает, потому что я никогда не пишу переменные в клипах, а задаю их на корневой диаграмме.
то есть так:

mc = _root.attachMovie("clip_mc","clip_mc",100);
mc.id = 1
trace("Сразу после attachMovie() > "+mc.id)
clip_mc.onPress = function(){trace("По нажатию на клип > "+clip_mc.id);}

безупречно работает.

ну, а в твоем случае я сделал так:

mc = _root.attachMovie("clip_mc","clip_mc",100);
mc.onEnterFrame = function () {
if(this.id != undefined) {
trace("Сразу после attachMovie() > "+mc.id)
delete this.onEnterFrame;
}
}
clip_mc.onPress = function(){trace("По нажатию на клип > "+clip_mc.id);}

это будет быстрее твоих setInterval'ов

sy555
06.08.2009, 21:21
Спасибо , надо начинать писать аккуратнее, идея с таймером работает, вопрос решен.

Xero201
06.08.2009, 21:21
Точняк, спасибо)
Твои действия хороши если это один кадр и одна переменная.
А как быть, если в клипе например 100 кадров и в каждом из них по 10 переменных (типо таблицы Менделеева)? Конечно, можно скопировать все эти переменные в ассоциативный массив, но тогда его надо будет менять каждый раз, когда поменяются переменные в кадрах клипа. И если, например, чел, который делает этот клип, заметит опечатки, исправит и никому ничего не скажет, то значения массива будут неверными, а постоянно перепроверять тоже не интересно(((

Zik.
06.08.2009, 21:40
а что мешает брать эти значения из массива и вставлять в таблицу?
тогда ничего перепроверять не надо
еще, на мой взгляд, объявлять перменные в клипе не рационально.
лучше прописывать свойства этому клипу, как я сделал в первом коде
mc.id = 1;

Xero201
06.08.2009, 22:01
Ну да, можно. Но это если так делать изначально. А если это большой (но кривой) проект, где таблица используется во многих местах, а не в одном мувике. То придеться много чего менять, а так же уговаривать всех это делать. Конечно, разработчики флэша не обязаны давать инструменты для кривых методов, но ведь переменные в клипах могут, наверное, располагаться и по умесному поводу, а раз так, нужно знать когда они проинициализируются при аттаче.
ЗЫ.
А разве свойство клипа и переменная внутри него не одно и тоже? Вызываются по крайней мере одинаково.

Zik.
06.08.2009, 22:07
А разве свойство клипа и переменная внутри него не одно и тоже? Вызываются по крайней мере одинаково.
Вы правы - одно и тоже.
Поэтому я и пишу, что лучше прописывать свойства на корневой диаграмме, так как разницы нет, а вызывать после аттача можно.

Xero201
06.08.2009, 22:07
О-о, в AS 3.0 ваще нет attachMovie! Туда ему и дорога)))

Zik.
06.08.2009, 22:10
в AS 3.0 куда лучше с этим.