Форум 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=113704)

scarbo 06.07.2008 18:38

Проблемы со звуковым прелоадером
 
Здравствуйте,у меня возникли проблемы с прелоадером для звука,при тестировании в Флеше все нормально(бар-полоска,посепенно движется,по мере загрузки файла),но в интернете бар-полоска,мгновенно становиться 100%??почему?
Проверял на медленном интернете,все равно.Вот код:
Код:

ramka_mc.bar_mc._xscale = 0;
var MySound:Sound = new Sound();
play_mc.onRelease = function(){
MySound.loadSound("http://classic.chubrik.ru/mp3/Rachmaninov/Rach-3_Volodos_1p.mp3", true);
onEnterFrame = function(){
        var L = MySound.getBytesLoaded();
        var T = MySound.getBytesTotal();
        if(L>5&&L==T){
                var Bar = Math.round(L/T*100);
                ramka_mc.bar_mc._xscale = Bar;
                trace(Bar+"%");
        }else{
                delete T;
                delete onEnterFrame;
                ramka_mc.bar_mc._xscale = 100;
        }
  }
}


Wolsh 06.07.2008 22:52

А звук-то начинает сразу играть, или только полоска ресайзится?
Как вариант - звуковой файл тупо закеширован браузером, поэтому действительно моментально загружается. Попробуйте отключить кеширование.

scarbo 06.07.2008 23:14

Пардон,но когда mp3шка 68 метров,врядли она сразу загружается,я и говорю бар-полоска,сразу на 100%,а звук может только минут через 5 пойти ,тестю на флеше все нормально.

vikingcompany 06.07.2008 23:40

В смысле "на флеше"? Control -> Test Movie, что ли?
Установи web-сервер да погоняй мувик там.

Wolsh 06.07.2008 23:50

Я, конечно, новичек в программировании, но вот Вы мне и объясните, что значит эта конструкция?
Код:

if(L>5&&L==T){
Я сильно подозреваю, что имелось в виду (по смыслу происходящего)
Код:

if((L>5)&&(L<T)){
Ваша же конструкция не способна выдать true, поэтому я не понимаю, как срабатывал код с ресайзом полоски))). Возможно Вы ошиблись второпях, вставляя здесь код. Зато ответ на Ваш вопрос очевиден - если L будет меньше 5 в момент опроса, выполнится второй блок условия - т.е. полоска 100% и т.д. А при загрузке с интернета L<5 в первый момент просто гарантирован.

scarbo 07.07.2008 00:36

Ой,блин,что я за лажу-то написал,код такой:
Код:

import mx.transitions.Tween;
import mx.transitions.easing.*;
stop_mc._visible = false;
ramka_mc._visible = false;
ramka_mc._xscale = 20;
ramka_mc.bar_mc._xscale = 0;
var MySound:Sound = new Sound();
play_mc.onRollOver = function(){
        play_mc.gotoAndPlay("navel");
}
play_mc.onRelease = function(){
        stop_mc._visible = true;
        play_mc._visible = false;
        ramka_mc._visible = true;
        ramka_mc.varT.stop();
        ramka_mc.varT = new Tween(ramka_mc, "_xscale", Regular.easeIn, ramka_mc._xscale, 100, 0.8, true);
MySound.loadSound("извлеченка.mp3", true);
onEnterFrame = function(){
        var L = MySound.getBytesLoaded()/1024;
        var T = MySound.getBytesTotal()/1024;
        if(L<T){
                var Bar = Math.round(L/T*100);
                ramka_mc.bar_mc._xscale = Bar;
                trace(Bar+"%");
        }else{
                delete T;
                delete onEnterFrame;
                ramka_mc.bar_mc._xscale = 100;
        }
  }
}
play_mc.onRollOut = play_mc.onReleaseOutside = function(){
        play_mc.gotoAndPlay("norma");
}
stop_mc.onRelease = function(){
        stopAllSounds();
        stop_mc._visible = false;
        play_mc._visible = true;
        ramka_mc.varT.stop();
        ramka_mc.varT = new Tween(ramka_mc, "_xscale", Regular.easeIn, ramka_mc._xscale, 20, 0.8, true);
        ramka_mc.varT.onMotionFinished = function(){
        ramka_mc._visible = false;
        }
}

Кстати ,даже пытался Муковский код ставить:
Код:

ramka_mc.bar_mc._xscale = 0;
Sound.prototype.checkLoadProgress = function(){
        var KL = Math.floor(this.getBytesLoaded()/1024);
        var KT = Math.floor(this.getBytesTotal()/1024);
        var P = isNan(Math.floor(KL/KT*100))?
                0:Math.floor(KL/KT*100);
        this.onBytesLoaded(this.getBytesLoaded(), this.getBytesTotal(), KL, KT, P);
        if(this.getBytesLoaded()>5
                                                        &&this.getBytesLoaded==this.getBytesTotal()){
                this.clearLoadCheck();
        }
}
Sound.prototype.clearLoadCheck = function(){
        if(this.loaderID){
                clearInterval(this.loaderID)
        }
}
Sound.prototype.pr = function(url, tr){
        this.clearLoadCheck();
        this.loadSound(url, tr);
        this.loaderID = setInterval(this, "checkLoadProgress", 200);
}
mySound = new Sound();
musik.onLoad = function(success){
        if(success){
                trace("Вперед!!!");
                this.start();
        }else{
                trace("Облом,бля");
                this.clearLoadCheck();
        }
}
mySound.onBytesLoaded = function(bytesLoaded, bytesTotal, KL, KT, P){
        trace(P+"%");
        ramka_mc.bar_mc._xscale = P;
}
play_mc.onRelease = function(){
mySound.pr("http://shalovnikov.by.ru/%c2%e5%f0%e4%e8%20%20%d1%f6%e5%ed%e0%20%e8%20%f0%e0%f1%f1%ea%e0%e7%20%c0%e7%f3%f7%e5%ed%fb.mp3", true);
}

Тест на Флеше проходит,а в инете сразу 100%юИ что делать???(Про штаны можно не советовать)

Wolsh 07.07.2008 00:51

Ну scarbo, Вы же ставите условие, не зная, началась ли загрузка и отменяете по else.
В момент опроса ни L ни T вообще может быть неизвестно, и Вы обрываете слежку и рисуете длинную полосу. Не надо else, надо if(L>=T).

scarbo 07.07.2008 00:53

О,класс Wolsh,работает,только Вы не описались ли случайно
Цитата:

надо if(L>=T)
Может надо L<=T,во всяком случае так работает,а когда тогда EnterFrame отменять?По факту загрузки?

Wolsh 07.07.2008 01:09

Хм, нет, я не описился. Я то имел в виду что это условие второго блока, т.е. при его выполнении закрываем лавочку. Вообще я бы блоки местами поменял - если L>=T - закончили слежку, else - следим, ресайзим и т.д.
Поймите, что поставить условие L>=T это совсем не то же самое, что else от L<T. Это совершенно разные вещи. else сработает, если условие L<T не выполнится. А оно может не выполниться, если L или T еще не известны. Жесткое же условие L>=T означает что загрузка завершилась.

scarbo 07.07.2008 01:19

О,здорово!Мда,не путать синтаксис русского языка с actionscript


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

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