![]() |
В чем разница между onLoad и onClipEvent(load) и проблемы с выкладыванием в сеть
Первый вопрос
Поясняю ситуацию. Нужно подгрузить внешний swf оставить его сделать невидимым и потом в определенный момент начать его проигрывать. movie находится в руте. В таймлайне прописана строка movie.onLoad = function () {stop();} Так жа на самом клипе movie прописано onClipEvent(load) {stop();} При trace(this) оба выдают ссылку на movie но! В случае onLoad останавливается проигрывание _root Если поменять _root.movie.stop(); или пишется _root.movie.gotoAndStop(1); this.stop(); _root проигрывается но сам movie не останавливается. Хотя поменять _x и _y я могу однако свойство _visible не меняется, т.е. клип как показывался так и показывается. Если все это менять в onClipEvent(load){ } все срабатывает правильно. все события происходят с movie. В чем фишка? Второй вопрос На клипе висит onClipEvent (load) { stop(); _visible=false; } В определенный момент я в _root пишу movie._visible=true; movie.play(); На локале все работает отлично. Но при выкладывании в интет мувик не запускается. Он становится видимым но не играет. Почему? Пыталась исспользовать вместо load data все равно не получилось |
Загрузка для локали и для онлайновой версии различается. По возможности разберись с MovieClipLoader - новым объектом во FlashMX2004. Это может решить проблему. Другой способ - для онлйн-версии используй проверку на то, загружен мувик или нет через функции getBytesLoaded() и getBytesTotal() примерно так:
if(yourMC.getBytesLoaded()/yourMC.getBytesTotal()==1){ yourMC._visible = 0 _root.play() } Это не весь код, а лишь намек. Поищи в хелпе и на форуме. Создание прелоадеров - такая же старая тема как и флеш вообще. |
Да, и еще: onLoad() и onClipEvent (load) можешь вообще не использовать в этом случае.
|
Вложений: 1
забыла оговорится все нужно сделать средствами максимум 6-го флеша. луше 5го. так что о средствах 2004 речи вообще не идет.
прелоадер у меня есть. и уровень загрузки я проверяю. все о чем я говорю происходит после прелоадера. |
для локальной версии не важно какая версия флеша, если ты публикуешь флеш в виде проектора. для веба делай классический прелоадер, который работает под 5-6-7 версии и обсуждался сотню раз на этом форуме.
|
прелоадер для основного клипа и прелоадеры для подгружаемых клипов - это разные штуки
|
Публикую для веба, а не для протектора. Хотя про протектор не знала. Буду иметь в виду.
Я знаю алгоритм прелоадера. Так же как и знаю что прелоадеры для основного и для подружаемых клипов разные вещи. Так же как и getBytesTotal() определяет размер самого мукиклипа без учета подгружемых файлов. Так в исходнике у меня там реализован алгоритм прелоадера для подгружаемого файла. И все происходит после или на этапе загрузки клипа. Но все равно не пойму почему не работает movie.onLoad? |
Попробуй добавить вот такой код. Будет работать.
sol = function (f) { if (__onLoadHandler__ == undefined) { _global.__onLoadHandler__ = {}; } __onLoadHandler__[this] = f; }; //getter for onLoad gol = function () { return __onLoadHandler__[this]; }; MovieClip.prototype.addProperty("onLoad", gol, sol); //Test _root.yourMovieClip.onLoad = function() { trace("I am loaded"); }; _root.yourMovieClip.loadMovie("someMovie.swf"); |
Либо есть еще вот такое решение (там же написано почему onLoad не работает):
http://www.actionscripts.org/forums/...threadid=13830 |
я может быть действительно чего-то не понимаю.
но зачем мне менять прототипы функций если у меня все подгружается нормально? я просто не могу застопить и сделать невидимым подгружаемый мувик. |
ох уж эта "женская логика", том 1 ! разбирайся сама в этом случае. с использованием той инфы что я дал все можно "застопить и сделать невидимым" за 5 секунд.
|
Вложений: 1
мне кажется, что легче всего сделать так. см пример.
|
я по порядочку:
Цитата:
а также нарушение правил написания кода. movie.onLoad = function () {stop();} movie.onLoad = function () {this.stop();} - это разные вещи. для того, чтобы избежать путанницы есть одно очень хорошее правило: любая переменная должна: - начинаться с _root или _global или this - или быть объявлена как локальная - или должна являться объявленным аргументом в твоем случае переменная stop не удовлетворяет вышеперечисленным требованиям. отсюда и путанниццца. смотрю дальше.... |
Цитата:
onLoad не работает для динамически созданных или загруженных movie clip'ов. Это все написано в ХЭЛПЕ. т.е., все Ваши инструкции вызываются при событии onLoad, но отменяются сразу после того, как в movie загружается несколько процентов внешнего swf. наверное, я не внятно объясняю... короче, Ваша инструкция stop(); выполняется до того, как загрузится клип, который нужно остановить. т.е. она применяется вхолостую. Цитата:
чтобы остановился movie, нужно прописать movie.stop(); в случае с onClipEvent(load) {stop();} код выполняется а) когда movie впервые появляется на сцене и б) когда в movie НАЧИНАЕТ загружаться мувик. Цитата:
может быть ошибка какая-то в подгружаемом мувике? |
| Часовой пояс GMT +4, время: 02:33. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.