Как создать музыкальный проигрыватель XML в ActionScript3? - PullRequest
0 голосов
/ 20 декабря 2011

Я новичок в AS3 и пытаюсь создать музыкальный проигрыватель XML. По неизвестным причинам музыкальный проигрыватель, который я кодировал (графический интерфейс был размещен на сцене, поэтому кодирование для них не включено) не будет отображать текст или воспроизводить музыку. Код, который у меня пока есть:

var my_songs:XMLList;
var my_total:Number;

var my_sound:Sound;
var my_channel:SoundChannel;

var current_song:Number = 0;

var song_position:Number;
var song_paused:Boolean;

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("playlist.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
    var myXML:XML = new XML(e.target.data);

    my_songs = myXML.SONG;
    my_total = my_songs.length();

    //playSong(0);

    myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
    myXMLLoader = null;

}

function playSong(mySong:Number):void {
    var myTitle = my_songs[mySong].@TITLE;
    var myURL = my_songs[mySong].@URL;

    title_txt.text = myTitle;

    if (my_channel) {
        my_channel.stop();
        my_channel.removeEventListener(Event.SOUND_COMPLETE, onNext);
    }

    my_sound = new Sound();
    my_sound.load(new URLRequest(myURL));
    my_channel = my_sound.play();
    my_channel.addEventListener(Event.SOUND_COMPLETE, onNext);
}
//Jumps to the next track in the list.
next_btn.addEventListener(MouseEvent.CLICK, onNext);
function onNext(e:Event):void {
    current_song++;
    if (current_song>=my_total) {
        current_song=0;
    }
    playSong(current_song);
}
//Jumps position back to previous track in the list.
prev_btn.addEventListener(MouseEvent.CLICK, onPrev);
function onPrev(e:MouseEvent):void {
    current_song--;
    if (current_song<0) {
        current_song = my_total-1;
    }
    playSong(current_song);
}
//Pauses music, causing current song to jump back to the beginning when play resumes.
pause_btn.addEventListener(MouseEvent.CLICK, onPause);
function onPause(e:MouseEvent):void {
    if (my_channel) {
        song_position = my_channel.position;
        my_channel.stop();
        song_paused=true;
    }
}
//Plays music.
play_btn.addEventListener(MouseEvent.CLICK, onPlay);
function onPlay(e:MouseEvent):void {
    if (song_paused) {
        my_channel = my_sound.play(song_position);
        song_paused=false;
    } else if (!my_channel) {
       playSong(current_song);
    }
}

Если кто-то может указать на какие-либо ошибки и исправления, это будет очень ценно.

1 Ответ

0 голосов
/ 20 декабря 2011

На первый взгляд мне кажется, что вы загружаете XML, прежде чем добавляете прослушиватель.Попробуйте переписать эти строки:

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("playlist.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

так:

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
 myXMLLoader.load(new URLRequest("playlist.xml"));

Кроме этого, ваш код работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...