Просмотр полной версии : при остановке одного mc почему-то останавливается другой (исходник тут)
Привет!
Подскажите плз, так и должно быть, или я в чем-то туплю...
Аттачу из root'a клип, в середине останавливаю его, и там же аттачу другой клип.
Ожидал, что второй клип начнет играть, ан-нет...
Он тоже стоит на первом кадре, play() не помогает...
Я не совсем понимаю, как сам флеш играет вообще клипы... Так как эти 2 клипа - на level0, то возможно, у флеша есть какой-то "бегунок", который останавливается для всех клипов? В общем, я в непонятках...
В чем грабли????
Посмотрите плз, исходник для MX я приаттачил...
А они не на один level аттачатся??
sergwizard
21.08.2003, 01:56
Может быть, вот так?
2 DUDE: аттачатся на один level (_level0)... Как приаттачить на разные, я не знаю... Или ты имел в виду depth? Depth у них разный, а иначе второй клип "затирает" первый...
2 sergwizard: спасибо за помощь, у тебя все работает как надо... Я пока еще не понял, почему не работало у меня, буду сравнивать, анализировать, разбираться... А вообще у меня складывается такое впечатление, что ActionScript не совсем "строгий" язык...
Посмотрите плз, у кого есть время...
Должно работать, но не работает...
В первом кадре _level0 у меня такое написано:
function motionClip(){}
motionClip.prototype = new MovieClip();
motionClip.prototype.condition=true; //просто какое-то условие
motionClip.prototype.dir=1; //direction of playing
motionClip.prototype.onEnterFrame = function()
{
if (this._currentframe == this._totalframes) //последний кадр
{
if(this.condition==true)
{
//_root.attachMovie('circle2','circle2',2);
//если аттачить тут, то не работает
//а если из последнего фрейма circle1, то работает...
this.stop();
}
else
this.dir = -1;
}
if (this.dir == -1)
{
//проигрывание назад, но это не относится к вопросу
if (this._currentframe>1)
this.gotoAndStop(this._currentframe-1);
else
this.stop();
}
};
Object.registerClass('circle1', motionClip);
//аттачится первый клип, из которого потом
//будет аттачиться второй
_root.attachMovie('circle1','circle1',1);
stop();
Ну почему если аттачить клип №2 (circle2) из обработчика OnEnterFrame, то оба клипа останавливаются, а если аттачить из последнего кадра circle1 - все работает????
Пушистик
21.08.2003, 13:17
я может быть не догнал проблему, но может так...?
Привет, Пушистик!
Ты "догнал" проблему ;))
В твоем примере - все работает, но у меня в том что я делаю на флеше, нужно обработчик onEnterFrame для клипа circle1 сделать программно - ну система такая... Так вот когда я его делаю программно, и из последнего кадра аттачу второй клип circle2, то оба клипа останавливаются.
А вот если аттачить из последнего кадра circle1, выбрав на линейке последний кадр и прописав там аттач, как это у тебя сделано, то все работает...
В принципе, жить можно и так, но как-то не универсально получается - в нескольких клипах писать в кадрах action'ы... Я хотел все в prototype запихнуть...
Пушистик
21.08.2003, 13:25
вот!из первого кадра!
Вообще, очень приятно, что люди отрываются от своих дел, и помогают... Хороший сайт...
Пушистик
21.08.2003, 13:39
а ты не пробовал задавать новое имя?:)
вот тут:
_root.attachMovie('circle2', 'circle2 ', 2);
тоже иногда бывает полезно.....
Ага, пробовал, не помогало ;)
Буду разбираться, спасибо за исходники...
Nox Noctis
21.08.2003, 15:26
все просто™ :) смотри:
каждый кадр {
если (кадр последний) И если (условие) { АТТАЧ; стоп; }
}
то есть как только первый клип доходит до последнего кадра, в КАЖДОМ следующем кадре начинает срабатывать аттач. и каждый кадр на сцене появляется НОВЫЙ второй клип, который стирает предыдущую его копию и начинает играть с начала... то есть визуально получается что он стоит в первом кадре. а нужно чтобы аттач сработал только один раз.
вот, например, так работает:
(и первый клип сразу назад проигрываться начинает...)
motionClip.prototype.onEnterFrame = function() {
if (this._currentframe == this._totalframes) {
if (this.condition == true) {
_root.attachMovie('circle2', 'circle2', 2);
this.condition = false;
Nox Noctis - спасибо!
Это было то, что нужно!
А не знаешь случайно, почему для первого клипа в последнем кадре постоянно возникает событие onFrameEnter, хотя я делаю клипу stop(), и визуально он находится в последнем кадре?
Это уже чисто теоретический вопрос для меня...
Ну stop() и onEnterFrame совершенно разные вещи..если хочешь уничтожить onEnterFrame в клипе пиши
delete this.onEnterFrame... если я правильно понял вопрос.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.