PDA

Просмотр полной версии : обнуление бар полоски при потоковой загрузке mp3


scarbo
05.09.2008, 02:36
Такая проблема:
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() засунуть в функцию нажатия,ну и остальное причесать.

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