Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Плейлист для mp3-плеера (http://www.flasher.ru/forum/showthread.php?t=180473)

Маруська 03.06.2012 21:53

Плейлист для mp3-плеера
 
Вложений: 1
Скачала небезызвестный исходник плеера RSPlay2.
Переделала дизайн, добавила нужное, удалила лишнее. Но вот как добавить плей-лист - никак не пойму.
Создала мувик с вложенным полем pl, и бьюсь уже третий день - никак не могу сообразить, как в него плейлист вставить.
Отлично понимаю, что всё необходимые переменные уже есть, но вот как их организовать - не понимаю.
Помогите, пожалуйста. Наверняка, кто-то уже это делал.
Вот исходник:

Маруська 04.06.2012 09:54

Добавлено через 9 минут
ок, хотя бы так подскажите:
вот есть у меня элемент arrayUrl[i], которому присвается текстовое значение, полученное по ссылке из XML-файла. Мне нужно организовать массив строк, отображаемый в мувике pl. пока хотя бы так.

Добавлено через 36 минут
Код AS1/AS2:

var mc = tracks_mc.pl.attachMovie('item', 'item'+i, i);

создала переменную, через которую в мувик pl должен подгружаться объект item, в котором размещены поля динамического текста name_txt и time_txt.
выдает: Error #1006: attachMovie не является функцией.

Партизан 04.06.2012 10:48

Маруська, вам бы и рады помочь, но формулировка вашего вопроса не точна. Вам нужно было сразу написать, что вы делаете кастомный playlist для плеера. Я так понял, что реализация плеера этого не предусматривает.

Итак, вам нужно в вашем плейлисте отобразить название треков.
У вас есть мувик tracks>pl
1. Вам нужно создать мувик строки вашего плейлиста, допустим это будет класс Item.
2. Item должен включать в себя текстовое поле для отображения названия трека, которое возможно должно быть с горизонтальной прокруткой если длина названия не помещается в плейлист.
3. При формировании массива arrayUrl вы создаете экземпляры Item, присваиваете соответствующему свойству название песни, и добавляете экземпляры в ваш плейлист(tracks.pl). Попутно добавляете обработчики событий для клика по экземплярам которые будут переключать выбранный трек.
4. Если треков больше чем возможно отобразить, включаете скролл для pl. Скроллер у вас там какой-то есть в дизайне.

ObOs 04.06.2012 10:52

И attachMovie был в AS2, в AS3 используйте addChild

Маруська 04.06.2012 11:28

угу, именно так. Но на AS 3 я пока ещё не работала, поэтому абсолютно не понимаю, как это организовать. То есть начальный минимум (типа экземпляра объекта item и прочих мелочей) создала - а дальше стопорится всё=(

in4core 04.06.2012 13:52

Ну так и пишите на ас2, зачем лезть в дебри не зная даже основ

Маруська 04.06.2012 14:08

скачала исходник на AS 3. расковырять и переработать ума хватило. даже новые маленькие функции добавить смогла. А на плей-лист меня что-то не хватает.. а на AS2 сейчас это переносить - нецелесообразно.
А основы я знаю. 4 года на флеше всякую мультимедийную фигню рисую.

Спасибо за совет.

Добавлено через 1 час 1 минуту
Код AS1/AS2:

for(var i:int = 0; i<playlist.url.length(); i++){
        arrayUrl[i] = playlist.url[i].text();
        var Item:item = new item();
        var mc = tracks_mc.pl.addChild(Item);
        mc._x = 5; // немного сдвигаем его по оси _x
        mc._y = yy; // назначаем новую координату по _y
        yy += mc._height+dif; // считаем координаты для следующего элемента плей-листа

ничего в pl не выводит. ни одного экземпляра item. где ошибка?

DaFive 04.06.2012 18:55

trace в помощь
Сначала tracks_mc, потом tracks_mc.pl, потом все остальное. Еще их значение numChidlren посмотреть и вообще счастье будет.

udaaff 04.06.2012 18:59

Маруська, в AS3 x, y, height без знаков подчеркивания.

Маруська 05.06.2012 13:36

спасибо, но ничего от этого не меняется

in4core 05.06.2012 13:54

Все же еще раз советаю, раз вы на ас2 писать умеете, пишите там, не нужно смотреть чужую реализацию на ас3, напишите ( придумайте ) свою на ас2, это сократит вам время, и не убьет мозг. Или пиши в ЛС обсудим

Маруська 08.06.2012 22:32

Вложений: 1
Код AS3:

function whenLoaded(event:Event):void{ // если загрузка XML прошла успешно то в наш массив с адресами запишем все ее содержимое 
        playlist = XML(event.target.data);
        yy = 5; // размещать элементы плейлиста будем от 5
        dif = 40; // расстояние по высоте между элементами в списке
// перебираем все элементы xml файла плей-листа нашего mp3 плеера
        for(var i:int = 0; i<=playlist.url.length(); i++){
        arrayUrl[i] = playlist.url[i].text();
        trace(playlist.url[i].text())
        var Item:item = new item();
        var mc = pl.addChild(Item);
        trace (pl.addChild(Item))
        mc.x = 5; // немного сдвигаем его по оси _x
        mc.y = yy; // назначаем новую координату по _y
        yy += dif; // считаем координаты для следующего элемента плей-листа
                mc.name_txt.text=arrayUrl.length+ soundObj.id3.songName;// название песни
                }
        name_txt.text = "0"+"/"+arrayUrl.length+" Исполнитель - Название Песни";//и обновим тектовое поле добавив туда информацию о колличестве трэков
}

выдаёт ошибку
TypeError: Error #1010: Термин не определен и не имеет свойств.
at gktth_play_fla::MainTimeline/whenLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

Не знаю уже, что делать

Маруська 09.06.2012 10:31

как передать локальный параметр из одной функции в другую?

Из этой
Код AS3:

function whenLoaded(event:Event):void{ // если загрузка XML прошла успешно то в наш массив с адресами запишем все ее содержимое 
        playlist = XML(event.target.data);
        yy = 5; // размещать элементы плейлиста будем от 5
        dif = 30; // расстояние по высоте между элементами в списке
// перебираем все элементы xml файла плей-листа нашего mp3 плеера
        for(i = 0; i<=playlist.url.length(); i++){
        arrayUrl[i] = playlist.url[i].text();
        var Item:item = new item();
        var mc = pl.addChild(Item);
        mc.x = 5; // немного сдвигаем его по оси _x
        mc.y = yy; // назначаем новую координату по _y
        yy += dif; // считаем координаты для следующего элемента плей-листа
// в каждый элемет плейлиста (списка) пишем несколько переменных:
        mc.name_txt.text=playlist.url[i].text();
        mc.i=i // !!!!!!!!!!!!!!!!!!!!! необходимый мне параметр!!!!!!!!!!;
        mc.buttonMode = true;
        mc.addEventListener(MouseEvent.CLICK, playTrack);
        }
        name_txt.text = "0"+"/"+arrayUrl.length+" Исполнитель - Название Песни";//и обновим тектовое поле добавив туда информацию о колличестве трэков
}

В эту
Код AS3:

function playTrack(event:MouseEvent):void{ //Запускается когда нажата кнопка СЛЕДУЮЩИЙ ТРЕК
        play_mc.visible = false; // определяем какие кнопки управления должны быть видимыми а какие нет
        stop_mc.visible = true; //
        track=mc.i; //!!!!!!!!!!!!!!!!необходимый мне параметр!!!!!!!!!!
        try { // пытаемся выполнить стоп и закрытие канала, если канал уже закрыт (загрузка закончилась) то оное вызовет ошибку и выполнение перейдет к catch
                soundCha.stop();
                soundObj.close();
        } catch(e:Error){
                soundCha.stop(); // просто остановим
        }
        PlaySound();


fish_r 09.06.2012 10:55

Цитата:

Сообщение от Маруська (Сообщение 1083811)
как передать локальный параметр из одной функции в другую?[/as3]


через поле ( перем. ) класса

Маруська 09.06.2012 11:05

Цитата:

Сообщение от fish_r (Сообщение 1083814)
через поле ( перем. ) класса


ну это я не дура, знаю. но у меня вызываемая функция trackPlay создаётся в функции whenLoaded. и вот как в таком случае передавать параметр?

DaFive 09.06.2012 11:10

Где это она у вас там создается внутри whenLoaded? Ткните пальцем.

Маруська 09.06.2012 11:32

Код AS3:

mc.addEventListener(MouseEvent.CLICK, playTrack);

Ну не создаётся, описывается. но она тоже локальная.

DaFive 09.06.2012 11:56

Код AS3:

var skbdish:String = '';
function whenLoaded(...) {
    skbdish = 'пыщь пыщь';
}
function playTrack(...){
    trace('i know all about skbdish:'+skbdish);
}


Маруська 09.06.2012 15:04

фигня.. всё не то =((

Добавлено через 18 минут
как узнать, на какой именно Item сработала функция mc.addEventListener(MouseEvent.CLICK, playTrack);?

Код AS3:

function whenLoaded(event:Event):void{ // если загрузка XML прошла успешно то в наш массив с адресами запишем все ее содержимое 
        playlist = XML(event.target.data);
        yy = 5; // размещать элементы плейлиста будем от 5
        dif = 30; // расстояние по высоте между элементами в списке
// перебираем все элементы xml файла плей-листа нашего mp3 плеера
        for(i = 0; i<=playlist.url.length(); i++){
        arrayUrl[i] = playlist.url[i].text();
        var Item:item = new item();
        var mc = pl.addChild(Item);
        mc.x = 5; // немного сдвигаем его по оси _x
        mc.y = yy; // назначаем новую координату по _y
        yy += dif; // считаем координаты для следующего элемента плей-листа
// в каждый элемет плейлиста (списка) пишем несколько переменных:
        mc.name_txt.text=playlist.url[i].text();
        mc.i=i;
        mc.buttonMode = true;
        mc.addEventListener(MouseEvent.CLICK, playTrack);
        }
        name_txt.text = "0"+"/"+arrayUrl.length+" Исполнитель - Название Песни";//и обновим тектовое поле добавив туда информацию о колличестве трэков
}
 
function playTrack(event:MouseEvent):void{ //Запускается когда нажата кнопка СЛЕДУЮЩИЙ ТРЕК
        play_mc.visible = false; // определяем какие кнопки управления должны быть видимыми а какие нет
        stop_mc.visible = true; //
        //trace(pl.mc.i);
        //track=i;
        try { // пытаемся выполнить стоп и закрытие канала, если канал уже закрыт (загрузка закончилась) то оное вызовет ошибку и выполнение перейдет к catch
                soundCha.stop();
                soundObj.close();
        } catch(e:Error){
                soundCha.stop(); // просто остановим
        }
        PlaySound();// и запустим воспроизведение нового трека
}


DaFive 09.06.2012 15:38

Плохо когда не понимаешь, что пишешь.
Код AS3:

function whenLoaded(){
.....
mc.item = Item;
}
 
function playTrack(event){
var mc_with_item:*чо_у_вас_за_класс_там* = event.target as *чо_у_вас_за_класс_там*;
trace(mc_with_item.item);
 
}


Маруська 09.06.2012 15:44

Код AS3:

mc.item = Item;

записывает в mc.item [object item]

*чо_у_вас_за_класс_там* - нет у меня там класса никакого.

И да - очень плохо. но надо жэ как-то учиться и понимать.

DaFive 09.06.2012 15:47

напишите MovieClip.

:rtfm:
А вот здесь как раз рассказывают, как сделать плеер с нуля, не лепя горбатого: Вот здесь решение

Маруська 09.06.2012 15:52

ну спасибо. Вам всем сложно подсказать мне пару строчек или объяснить что к чему. Как будто я не ищу решений. я и так уже столько литературы перелопатила. И много чего сумела сделать. но вот только этот плей-лист никак не даётся. мне осталось в нём только суметь определить, на какой экземпляр Itema ткнули мышкой.
откуда столько негатива?


и зачем писать MovieClip?

DaFive 09.06.2012 15:57

Я вам показал, что в mc записывается item. event.target - это и есть ваш mc.
Выведите трейс event.target.item и посмотрите что выводит.

Маруська 09.06.2012 15:59

ReferenceError: Error #1069: Не удалось найти свойство item в flash.display.SimpleButton; отсутствует значение по умолчанию.

Добавлено через 6 минут
Допиши в мой код, пожалуйста, что нужно сделать..

DaFive 09.06.2012 16:06

А ыть-перетыть, слона-то я не приметил. pl.addChild(Item) возвращает аккурат тот Item, которому мы назначаем клик. Значит трейсим event.target и получаем искомый item. Сотрите, что я говорил написать ранее.
Код AS3:

trace(event.target.name_txt.text);
trace(event.target.i);

Форматируйте код лучше, потом пригодится.

Маруська 09.06.2012 16:08

ReferenceError: Error #1069: Не удалось найти свойство name_txt в flash.display.SimpleButton; отсутствует значение по умолчанию.

ReferenceError: Error #1069: Не удалось найти свойство i в flash.display.SimpleButton; отсутствует значение по умолчанию.

Добавлено через 8 минут
event.target выводит просто [SimpleButton]

Добавлено через 10 минут
при трейсе в event.target не находит ни одного свойства, которые есть в mc

DaFive 09.06.2012 16:32

А, так оно у вас еще и simplebutton. Тогда я вообще не понимаю, как вам удается присваивать mc какие-то параметры, чтобы не вываливалось ошибок. Потому что, компилятор заругался бы еще до момента обвешивания ваших mc кликом. Магия.
Давайте, чисто ради спортивного интереса:
Код AS3:

mc.name_txt.text=playlist.url[i].text();
mc.i=i;
trace(mc, mc.name_txt.text, mc.i); // чо тут?


Маруська 09.06.2012 16:33

[object item] 1 Mr Saxobeat Iinstrumental .mp3 0
[object item] 2 If you love me.mp3 1
[object item] 3 Deepest blue .mp3 2
[object item] 4 Shade.mp3 3
[object item] 5 .mp3 4
[object item] 6 Fidati me.mp3 5
[object item] 7 mama Maria.mp3 6
[object item] 8 Chervona remix.mp3 7
[object item] 9 tell birds.mp3 8

Добавлено через 6 минут
все мои 9 треков=)

K.A.T.A.F.A.L.K.E.R 09.06.2012 16:40

Я не в теме, просто мимо проходил. Зачем смотрите event.target? Для клика мышью информации тут мало. event.currentTarget получше будет

Маруська 09.06.2012 17:05

вот оно!!! спасибо, мил человек!!!


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

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