Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как дождаться загрузки подгружаемого фильма (http://www.flasher.ru/forum/showthread.php?t=89030)

Zmet 06.12.2006 11:50

Как дождаться загрузки подгружаемого фильма
 
Ситуация.
Есть интерфейс. В него подгружаются фильмы. В зависимости от текущих настроек интерфейса (например, языковых) в подгружаемом фильме происходит управление клипами (например, прозрачностью).

Проблема.
Подгружаемый фильм начинает воспроизводиться по мере загрузки, и в этом случае обращение к объектам этого фильма невозможно (видимо до полной загрузки). Как сделать так, чтобы фильм не начинал проигрываться до полной его загрузки и чтобы проигрывался уже с измененными параметрами? Из Гурского был почерпнут следующий код для подобных ситуаций:
Код:

MovieClip.prototype.onLoad = function() {
        if (this == newMov) {
                trace(zamena.someClip); //выдает undefined
        }
};

Функция срабатывает когда надо. Но почему-то управлять объектами встроенного клипа все равно не получется.

Zmet 06.12.2006 11:53

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

CorC 06.12.2006 12:00

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

Zmet 06.12.2006 12:07

Нет, прелоадер мне совсем не нужен. Собственно вопрос "непроигрывания" фильма до конца загрузки решен (см. функцию выше). Другой вопрос, что непосредственно после этого невозможно обращение к объектам фильма.
Я не понимаю почему и что с этим делать.

Zmet 06.12.2006 12:47

Код:

MovieClip.prototype.onLoad = function() {
        if (this == newMov) {
                trace(newMov._totalframes);
                for (var i in newMov) {
                        if (newMov[i].getDepth) {
                                trace("Объект мувика: " + newMov[i]);
                        } else {
                                trace("Объекты не обнаружены");
                        }
                }
        }
};
bFilm.onRelease = function() {
        newMov.loadMovie("film1.swf");
};

bFilm1.onRelease=function(){
        for (var i in newMov) {
                        if (newMov[i].getDepth) {
                                trace("Объект мувика: " + newMov[i]);
                        } else {
                                trace("Объекты не обнаружены");
                        }
                }
};

Вот полный код фильма, в который подгружается фильм. В подгружаемом фильме (film1.swf) на root лежит три мувика. Кнопка bFilm1 нажимается после нажатия на bFilm.
В аутпуте следующее:

57
Объекты не обнаружены
Объекты не обнаружены
Объект мувика: _level0.newMov.obj3
Объект мувика: _level0.newMov.obj2
Объект мувика: _level0.newMov.obj

Кстати, почему "объекты не обнаружены" два раза (второй появляется при нажатии на вторую кнопку)?

CorC 06.12.2006 13:03

getDepth это метод а не свойство, надо ()

Zmet 06.12.2006 13:07

Может так и правильней :) но работает и без скобочек. Это не принципиально вобщем-то для решения проблемы

CorC 06.12.2006 13:12

Цитата:

Сообщение от Zmet
Кстати, почему "объекты не обнаружены" два раза (второй появляется при нажатии на вторую кнопку)?

потому что глубина у одного из мувиков 0, по всей видимости, вот if и не выполнился

Zmet 06.12.2006 13:17

Да они одинаковые совершенно... все три. Такое ощущение, что там 4 объекта, а не три.
И потом не важно 0 это или 10000... Главное факт наличия, а не значение :)
Ну это тоже вопрос десятый... пока по крайней мере.

CorC 06.12.2006 13:33

Цитата:

Сообщение от Zmet
Главное факт наличия, а не значение

ты не прав, если Depth у мувика 0, то скрипт не зайдет в if
и попробуй заменить MovieClip.prototype на newMov
и вообще почему ты против прелоадеров? зато таких проблем не будет,
он тебе после загрузки сразу же все сделает как надо

CorC 06.12.2006 13:37

да кстати в руте еще содержится весрия плеера (это твой 4 обьект) и еще одно про prototype:
If you are using ActionScript 2.0, you don't need to use this property; it reflects the implementation of inheritance in ActionScript 1.

Zmet 06.12.2006 13:54

Цитата:

Сообщение от CorC
ты не прав, если Depth у мувика 0, то скрипт не зайдет в if
и попробуй заменить MovieClip.prototype на newMov
и вообще почему ты против прелоадеров? зато таких проблем не будет,
он тебе после загрузки сразу же все сделает как надо

Во-первых, я девушка. Я знаю, что это не очевидно :)
Во-вторых. Если бы один из мувиков лежал на нулевом уровне, было бы три надписи: "объекты не обнаружены" и еще два обнаруженных.
В-третьих. Насчет прелоадера. Что он изменит? У меня уже есть событие, которое наступает при загрузке фильма. Оно же корректно работает? И потом, знать сколько осталось до конца загрузки фильма мне не надо. Но если у тебя есть время и желание, и ты сделаешь пример такого прелоадера, который позволяет решить названную проблему, я буду тебе очень благодарна.

CorC 06.12.2006 14:13

Код:

oLoad = {};
Loader1=new MovieClipLoader();
oLoad.onLoadProgress = function(target, Load1, Total1) {
        aaa = (Load1/Total1);
        trace(aaa);
};
oLoad.onLoadComplete = function(target) {
        trace(newMov._totalframes);
        for (var i in newMov) {
                if (newMov[i].getDepth()!=undefined) {
                        trace("Объект мувика: " + newMov[i]);
                } else {
                        trace("Объекты не обнаружены");
                }
        }
        newMov.gotoAndPlay(1);
};
oLoad.onLoadError = function(target, errorCode) {
        trace("ERROR CODE = "+errorCode+" in "+target);
};
Loader1.addListener(oLoad);

bFilm.onRelease = function() {
        Loader1.loadClip(Link, newMov);
};

bFilm1.onRelease=function(){
        for (var i in newMov) {
                if (newMov[i].getDepth) {
                        trace("Объект мувика: " + newMov[i]);
                } else {
                        trace("Объекты не обнаружены");
                }
        }
};

нет, просто у 1 обьекта вообще нет глубины

Zmet 06.12.2006 14:22

Спасибо. У тебя работает? У меня нет
Я пока просто вставила код - попытаюсь покапаться
Кстати, у объекта не может не быть глубины. Если объект есть, значит и глубина у него есть

CorC 06.12.2006 14:33

да не, я не про то...
напиши в абсолютно пустом проекте
Код:

for (var i in _root)trace(_root[i]);
в руте мува хранится версия плеера, она без глубины
потому у тебя и выдавалось "Объекты не обнаружены"

кстати выше представленный прелоадер работает тока в инете

Zmet 07.12.2006 08:07

Цитата:

Сообщение от CorC
кстати выше представленный прелоадер работает тока в инете

Хм. Я, конечно, проверю для интереса, но вообще-то проект не он-лайновый. Это не предназначается для интернета.

Zmet 07.12.2006 08:11

WIN 8,0,22,0 - это версия плеера?! прикольно :)
То есть этот объект по умолчанию всегда на нулевом слое? молодцы! Спасибо, буду знать.

Zmet 07.12.2006 09:54

Не, не работает

CorC 08.12.2006 18:31

я специально собрал проект что б проверить
у меня работает, может ошибочка закралась у вас где-нибудь?

Zmet 11.12.2006 15:43

Цитата:

Сообщение от CorC
я специально собрал проект что б проверить
у меня работает, может ошибочка закралась у вас где-нибудь?

Может и правда закралась. Я, честно говоря, в коде толком и не разобралась. Вместо этого сделала прелоадер, но не для инета. Проблему решили :)
Спасибо огромное за помощь.


Часовой пояс GMT +4, время: 00:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.