So I made some a nifty a MP3 player that grabs songs from an XML file. It displays the song name in the dynamic text field. Unfortunately, I only have very little display space and many of the track names are long. The solution: marquee scroll the text horizonally. The problem: I never marquee scrolled dynamic text and now I am lost. I am looking for some advice please.
Here is my main AS:
stop();
playlist = new XML();
playlist.ignoreWhite = true;
playlist.onLoad = function(success) {
if (success) {
_global.songname = [];
_global.songband = [];
_global.songfile = [];
for (var i = 0; i<playlist.firstChild.childNodes.length; i++) {
_global.songname* = playlist.firstChild.childNodes*.attributes.name;
_global.songfile* = playlist.firstChild.childNodes*.attributes.file;
trace(songname*+" "+songfile*);
}
}
_root.createEmptyMovieClip(“sound_mc”, 1);
_root.sound_mc.sound_obj = new Sound();
_global.song_nr = random(songfile.length);
_root.sound_mc.songStarter(songfile[song_nr], songname[song_nr]);
};
MovieClip.prototype.songStarter = function(file, name) {
this.sound_obj.loadSound(file, true);
this.onEnterFrame = function() {
if (this.sound_obj.position>0) {
delete this.onEnterFrame;
this._parent.display_txt.text = name;
} else {
this._parent.display_txt.text = “loading…”;
}
};
this.sound_obj.onSoundComplete = function() {
(song_nr == songfile.length-1) ? _global.song_nr=0 : _global.song_nr++;
_root.sound_mc.songStarter(songfile[song_nr], songname[song_nr]);
};
};
btn_play.onRelease = function() {
this._parent.sound_mc.songStarter(songfile[song_nr], songname[song_nr]);
};
btn_stop.onRelease = function() {
this._parent.sound_mc.sound_obj.stop();
};
btn_fw.onRelease = function() {
(song_nr == songfile.length-1) ? _global.song_nr=0 : _global.song_nr++;
_root.sound_mc.songStarter(songfile[song_nr], songname[song_nr]);
};
btn_rev.onRelease = function() {
(song_nr == 0) ? _global.song_nr=songfile.length-1 : _global.song_nr–;
_root.sound_mc.songStarter(songfile[song_nr], songname[song_nr]);
};
playlist.load(“playlist.xml”);
So yeah, this works fantastic. Now how do I marquee?
I tried dropping the following code in directly after this line… this._parent.display_txt.text = name; :
l = 25;
x = 0;
stringOf = function (c, l) {
var temp = “”;
for (var x = 0; x<l; x++) {
temp += c;
}
return temp;
};
name = stringOf(" ", l)+name;
display = function () {
var temp = name.slice(x, l);
display_txt.text = temp;
x++;
l++;
if (x == name.length) {
x = 0;
l = 25;
}
};
setInterval(display, 200);
stop();
And while this did make the text scroll on the first song, it doesn’t work so hot on the second song. It blips back-and-forth between the first and second song name. Advance to a third song and you’ve got an even bigger blipping mess. I kind of think that this code above isn’t the way to go… that it isn’t even worth reworking… that I should try something completely new. Anyone have any thoughts?