Форум 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)
-   -   обнуление бар полоски при потоковой загрузке mp3 (http://www.flasher.ru/forum/showthread.php?t=115632)

scarbo 05.09.2008 02:36

обнуление бар полоски при потоковой загрузке mp3
 
Такая проблема:
1)Есть XML галерея,в которой при клике на люьой из фоток,грузится соответствующяя музыка.
2)после щелчка,фотка _visible = false,а на её месте 2 бар-ползунка - один отбражает сколько mp3шки загрузилось,а другой - сколько проигралось,ну и плюс соответствующие текстовые поля.естественно для каждой фотки,своя такая приблуда.

Проблема в следующем - при первом нажатии все ОК,музон играет циферки и полоски ползут,а вот при нажатии на другие фотки,музон тож играет,а вот циферки и полоски продолжают двигаться с той же позиции в которой остановились после 1 раза.

Код:

var Play:Boolean = true;
var paus:Boolean = true;
var SL:Number = 0;
var L:Number = 0;
var T:Number = 0;
var ST:Number = 0;
var Pr:Number = 0;
var Spr:Number = 0;
var El = null;
var Vos:Boolean = true;
var KonSound:Sound = new Sound();
KonSound.stop();
//tra-ta-ta
//
function fotoPress() {
        if (Play) {
                Play = false;
                Vos = false;
                El = this.link;
                KonSound.loadSound(El,true);
                //KonSound.start();
                this._parent.attachMovie("stop","stop_mc",this._parent.getNextHighestDepth());
                this._parent.stop_mc._x = this._x+38;
                this._parent.stop_mc._y = this._y+55;
                this._parent.attachMovie("play_pause","play_mc",this._parent.getNextHighestDepth());
                this._parent.play_mc._x = this._x+10;
                this._parent.play_mc._y = this._y+55;
                //Регулятор громкости
                var Shkala:MovieClip = this._parent.createEmptyMovieClip("shkala_mc", this._parent.getNextHighestDepth());
                var Gr:MovieClip = this._parent.createEmptyMovieClip("Gr_mc", this._parent.getNextHighestDepth());
                pozun(Shkala,0xdddddd,100);
                with (Gr) {
                        beginFill(0x00ffff,100);
                        moveTo(0,0);
                        lineTo(5,-9);
                        lineTo(-5,-9);
                        lineTo(0,0);
                        endFill();
                }
                Shkala._x = this._x+65;
                Shkala._y = this._y+54;
                Shkala._height = 0.3;
                Shkala._width = 50;
                Gr._x = this._x+115;
                var top = Gr._x;
                Gr._y = this._y+54;
                Gr.onPress = function() {
                        this.startDrag(false,Shkala._x,Shkala._y,(Shkala._x+Shkala._width),Shkala._y);
                        this.onEnterFrame = function() {
                                KonSound.setVolume(100-(top-this._x)*2);
                        };
                };
                Gr.onRelease = Gr.onReleaseOutside=function () {
                        this.stopDrag();
                        delete this.onEnterFrame;
                };
                //Загрузка функций
                Pla(this);
                Sto(this);
                End(this);
                foto(this);
                PRO(this);
                var IN = setInterval(PRO, 30, this);
        }
}
// * * * * * * * * *  Ф У Н К Ц И Я  П Л Е Е Р А  * * * * * * * * *
//Клавиша Плей
function Pla(mc:MovieClip) {
        mc._parent.play_mc.onPress = function() {
                if (paus) {
                        this.gotoAndStop(2);
                        KonSound.stop();
                        paus = false;
                } else {
                        paus = true;
                        this.gotoAndStop(1);
                        KonSound.start(SL);
                }
        };
}
//Клавиша Стоп
function Sto(mc:MovieClip) {
        mc._parent.stop_mc.onPress = function() {
                mc.enabled = true;
                Play = true;
                Vos = true;
                El = null;
                KonSound.stop();
                clearInterval(IN);
                mc.ramka_mc.removeMovieClip();
                mc.pic._visible = true;
                mc._parent.stop_mc.removeMovieClip();
                mc._parent.play_mc.removeMovieClip();
                mc._parent.Gr_mc.removeMovieClip();
                mc._parent.shkala_mc.removeMovieClip();
        };
}
//Конец проигрования
function End(mc:MovieClip) {
        KonSound.onSoundComplete = function() {
                mc.enabled = true;
                Play = true;
                clearInterval(IN);
                mc.ramka_mc.removeMovieClip();
                mc.pic._visible = true;
                mc._parent.stop_mc.removeMovieClip();
                mc._parent.play_mc.removeMovieClip();
                mc._parent.Gr_mc.removeMovieClip();
                mc._parent.shkala_mc.removeMovieClip();
        };
}
//Функция визуальных элементов
function foto(mc:MovieClip) {
        mc.enabled = false;
        mc.pic._visible = false;
        mc.createEmptyMovieClip("ramka_mc",this.getNextHighestDepth());
        mc.ramka_mc._x = 0;
        mc.ramka_mc._y = 45;
        //Рисование бар-полоски и ползунка
        var Bar:MovieClip = mc.ramka_mc.createEmptyMovieClip("bar_mc", mc.ramka_mc.getNextHighestDepth());
        var Polzun:MovieClip = mc.ramka_mc.createEmptyMovieClip("polzun_mc", mc.ramka_mc.getNextHighestDepth());
        polzun(Polzun,0xff0000,100);
        polzun(Bar,0xc4c4c4,100);
        //размер
        mc.ramka_mc.bar_mc._width = 120;
        mc.ramka_mc.bar_mc._height = 4;
        mc.ramka_mc.polzun_mc._width = 120;
        mc.ramka_mc.polzun_mc._height = 3;
        //выравнивание
        mc.ramka_mc.bar_mc._x = mc.ramka_mc.polzun_mc._x=10;
        mc.ramka_mc.bar_mc._y = -10;
        mc.ramka_mc.polzun_mc._y = -8;
        //создать текствое поле для отображения Времени проигрывания
        mc.ramka_mc.createTextField("Pr_txt",this.getNextHighestDepth(),35,-30,100,30);
        mc.ramka_mc.Pr_txt.selectable = false;
        mc.ramka_mc.Pr_txt.textColor = 0xcccccc;
        mc.ramka_mc.Pr_txt.setNewTextFormat(imgNameFormat);
        //создать текстовое поле для отображения громкости
        mc.ramka_mc.createTextField("Gr_txt",6,80,10,30,20);
        mc.ramka_mc.Gr_txt.selectable = false;
        mc.ramka_mc.Gr_txt.textColor = 0xcccccc;
        mc.ramka_mc.Gr_txt.size = 10;
        mc.ramka_mc.Gr_txt.setNewTextFormat(imgNameFormat);
}
//Проверка загуженности и проигронасти
function PRO(mc:MovieClip) {
        L = KonSound.getBytesLoaded();
        T = KonSound.getBytesTotal();
        SL = KonSound.position/1000;
        ST = KonSound.duration*T/L/1000;
        Pr = Math.round(L/T*100);
        SPr = Math.round(SL/ST*100);
        var min = Math.floor(SL/60);
        var sec = Math.floor(SL%60);
        var Min = Math.floor(ST/60);
        var Sec = Math.floor(ST%60);
        if (sec<10) {
                sec = "0"+sec;
        }
        if (Sec<10) {
                Sec = "0"+Sec;
        }
        mc.ramka_mc.bar_mc._width = (L/T*100);
        mc.ramka_mc.polzun_mc._width = (SL/ST*100);
        mc.ramka_mc.Pr_txt.text = min+":"+sec+"/"+Min+":"+Sec;
        mc.ramka_mc.Gr_txt.text = KonSound.getVolume();
}

Функция fotoPress вызывается в onLoadInit галереи с фотками
Как я понял проблема в том что KonSound.loadSound();
Вызывается внутри этой функции,если её вывести за пределы то все нормально,но тогда грузится тока 1 mp3шка,потому что,как отследить под какой фоткой ,какой адрес mp3шки.
Сори за код,но решил перестраховаться и весь привести.

scarbo 06.09.2008 03:02

Проблема решена

Wolsh 06.09.2008 13:21

scarbo, отлично что Вы справились сами, растете))))
Я хотел просто по-дружески посоветовать одну мелочь.
Вы не курите? Я вот курю((( И бывает, купишь блок сигарет, а по дороге домой к тебе гопник какойнибудь подрулит - дай сигаретку. И не скажешь "нету" - в руках блок. И начинаешь его распечатывать.... К чему это я? У Вас выражение mc.ramka_mc повторяется 22 раза. 22 раза плееру приходится искать mc, "распаковывать" его, искать ramka_mc. А мне, как человеку, пытающемуся понять Ваш код, приходится на каждой строчке делать бросок к середине предложения и там искать точку и читать уже от нее. Как все это сделать по-уму? Очень просто. Это называется ссылкой. При ее использовании плеер сразу может перейти к нужному свойству или методу. И код получается гораздо читабельней:
Код:

//Функция визуальных элементов
function foto(mc:MovieClip) {
    mc.enabled = false;
    mc.pic._visible = false;
    var ramka:MovieClip = mc.createEmptyMovieClip("ramka_mc", mc.getNextHighestDepth());
    ramka._x = 0;
    ramka._y = 45;
    //Рисование бар-полоски и ползунка
    var Bar:MovieClip = ramka.createEmptyMovieClip("bar_mc", ramka.getNextHighestDepth());
    var Polzun:MovieClip = ramka.createEmptyMovieClip("polzun_mc", ramka.getNextHighestDepth());
    polzun(Polzun,0xff0000,100);
    polzun(Bar,0xc4c4c4,100);
    //размер
    Bar._width = 120, Bar._height = 4;
    Polzun._width = 120, Polzun._height = 3;
    //выравнивание
    Bar._x = Polzun._x = 10, Bar._y = -10;
    Polzun._y = -8;
    //создать текствое поле для отображения Времени проигрывания
    var pr:TextField = ramka.createTextField("Pr_txt", ramka.getNextHighestDepth(),35,-30,100,30);
    pr.selectable = false;
    pr.textColor = 0xcccccc;
    pr.setNewTextFormat(imgNameFormat);
    //создать текстовое поле для отображения громкости
    var gr:TextField = ramka.createTextField("Gr_txt",6,80,10,30,20);
    gr.selectable = false;
    gr.textColor = 0xcccccc;
    gr.size = 10;
    gr.setNewTextFormat(imgNameFormat);
}

И заодно нашлась распространенная ошибка - почемуто все обожают писать "this.getNextHighestDepth()", забывая что здесь this указывает вовсе не на левую часть выражения, это же не тело функции, а аргументы - их область видимости соответствует текущей.

scarbo 06.09.2008 14:03

Wolsh,спасибо.Про ссылки я знаю,и сейчас уже все переправил,просто надо было KonSound:Sound = new Sound() засунуть в функцию нажатия,ну и остальное причесать.

А КУРИТЬ ВРЕДНО!!!!!!
Я ПРОБОВАЛ ,МНЕ НЕ ПОНРАВИЛОСЬ.


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

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