Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > внутренний прелоадер снова


Автор: Certain Chaos 19.9.2005, 02:07
Привет всем.

Вопрос предельно простой, но я не нашёл на него ответ.
На форуме такая проблема по моему не рассматривается.

На своём сайте - http://CertainChaos.spb.ru я использую прелоадер такого вида:
Код

onClipEvent (enterFrame) {
    l = this.getBytesLoaded();
    t = this.getBytesTotal();
if(t>5000) {
    if (l<t) {
        _root.gallera.createEmptyMovieClip("p", 1);
        _root.gallera.p.lineStyle(1, 0xff9900, 100);
        _root.gallera.p.moveto(44, -3);
        _root.gallera.p.lineto(Math.floor(40*l/t)+44, -3);
        loa = Math.floor(40*l/t);
        _root.load_inf._visible = 1;
    } else {
        _root.gallera.p.removeMovieClip();
        _root.load_inf._visible = 0;
        runn = "Yes";
            }
    }
}
}

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

Я столкиваюсь с этой проблемой не первый раз, но когда разместил .swf на 7 мегов, то понял что нужно её решать.

Есть ли способ исправить проблему, не сильно перелопачивая весь код сайта?


Автор: AlDev 19.9.2005, 07:28
Цитата(Certain @ 19.9.2005, 07:07)
мувики загружаются, но прогресса загрузки (в виде линии) не наблюдается.


попробуй грузить в новый клип.
т.е. у тея, на сколько я понял, подобный код:
Код

var mc:MovieClip = this.createEmptyMovieClip('some_mc',this.getNextHighestDepth());
mc.onEnterFrame = function(Void):Void
{
  var l:Number = this.getBytesLoaded();
  var t:Number = this.getBytesTotal();
  if(t>5000) 
  {
    if (l<t) 
    {
        _root.gallera.createEmptyMovieClip("p", 1);
        _root.gallera.p.lineStyle(1, 0xff9900, 100);
        _root.gallera.p.moveto(44, -3);
        _root.gallera.p.lineto(Math.floor(40*l/t)+44, -3);
        loa = Math.floor(40*l/t);
        _root.load_inf._visible = 1;
    }else
    {
        _root.gallera.p.removeMovieClip();
        _root.load_inf._visible = 0;
        runn = "Yes";
    }
  }
}
loadMovie('some_url',mc);

если так, то делай контейнер в том клипе, куда грузишь, и грузи в контейнер, а не в сам клип.

или я не так понял вопрос?

Автор: Certain Chaos 19.9.2005, 15:15
перед тем как пробовать, хотел бы узнать логику этого манёвра.
Если ты подозреваешь, что загружаемый мувик уничтожает онЭнтерФрэйм функцию окна, то это не так.
Или я что-то недопонимаю?
Синтаксис может на это влиять?
И у тебя такой вариант работает ведь?
объясни плиз.

Добавлено @ 15:18
просто у меня там куча зависимостей, картинки сменяются мягко за счёт кэширования и псевдоподгрузки в другой слой.

Автор: IvanB 19.9.2005, 15:19
Как вариант - не пользоваться onEnterFrame...
можно и setInterval-ом справиться...

Автор: AntonioBanderaz 20.9.2005, 00:11
А что с листенерами?
Можно ведь ими сделать, есть прекраный класс MovieClipLoader.
Создал экземпляр, а дальше через него погружаешь куда тебе надо и рисуешь свою линю во время погрузки.
Можно ещё написать класс, а дальше registerClass для мувиков в которые подгружаются, или мувика...

Автор: Certain Chaos 20.9.2005, 01:42
ну спасибо штоли, буду стараться!

Автор: AlDev 20.9.2005, 07:37
да, я думал про то, что переопределяется функция окна.
Ещё - может быть проблеа в обращении к _root...

Автор: IvanB 20.9.2005, 09:06
Сделать его свойством объекта в глобал, кстати, можно?

Автор: AlDev 20.9.2005, 11:05
Цитата(IvanB @ 20.9.2005, 14:06)
Сделать его свойством объекта в глобал, кстати, можно?

всмысле? и что это даст?

Автор: IvanB 20.9.2005, 12:30
К любому объекту из _global, насколько я понеимаю, можно обращаться в любой части кода...
А так сделать можно:
_global['obj']=new Object();
_global['obj']['mainClip']=_root;
?????
Цитата
может быть проблеа в обращении к _root...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)