================================
给一家杂志的,他们把我的教程分了家。呵呵~现在发全了大家没买的也看看吧
希望能转到首页去。国内类似的教程不是太多。
杂志上的署名是5D !theOne
源文件以及DOC文件可以下载。
================================
这篇教程通过一个FLASH MP3播放器来给大家讲解XML同FLASH相结合的知识;这篇
不需要太多的XML知识,需要一些Actionscript知识。希望通过学习这篇教程,大家能认识XML,可以使用XML快速的建立动态应用程序。
原文件下载:http://www.unanhui.com/
关于Xml
Extensible Markup Language(可扩展标记语言),又简称为 XML,是针对网络应用的一项新技术。
XML 是 World Wide Web Consortium(W3C) 的一个标准,它允许您定制您自己的标记。
利用XML能够更容易的进行数据交换。
看下面这段XML:
boy
12
在浏览器里显示如下图:
可以发现我们能够很容易的理解数据间的关系,一个班级里有两个学生,一个学生叫JIM,是个男孩子,12岁了。另外一个学生叫LILY.
我们可以在这个班级里面继续的添加学生。学生的数量没有限制。
对于XML,我们只需要很简单的一些知识,知道一个XML文件由根节点和子节点(或多级子节点)构成。
关于XML的更多详细信息请参考和http://www.w3c.org上的相关部分
FLASH的中应用XML;
System.usecodepage=true;
FLASH MX系统开始全面支持unicode编码格式,由于我们使用中文操作系统,我们保存文件的时候,如果没有自己选择,系统默认的存储方式是ANSI编码格式,通过使用System.useCodePage=true;可以使flash认识本系统默认的编码格式。
当然,我们也可以通过在保存文件的时候选择Unicode格式的文件而避免使用这句代码。
有关Unicode格式的信息可以在Macromedia.com搜索。
在FLASH中我们操作XML是通过XML对象来实现的所以我们先建立一个xml对象
my_xml=new xml();
使用XML对象的load方法加载外部XML文件。
my_xml.load("playList.xml");
my_xml.ignoreWhite=true;
ignoreWhite方法是忽略XML文件中的空白部分。这个方法对于我们使用了排版格式编写的XML是必须的,因为如果使用了排版格式,如我们一开始写出的那个班级的例子,每个节点都有空格存在,如果不忽略这些因强制回车而造成的空格,FLASH会将这些空格分析成为一个子节点,这对于我们分析XML很不利。
编写播放列表
如下:
建立需要的元素
如图:我们需要建立三个文本框
属性设置如下:
var变量分别设置为:album 、name、artist;
人头部分是缺省的图片显示MC,可以随便做。命名为temp_mc便可。
音量滑动杆是使用flash公用库里的按钮部分里的现成MC(Knobs & Faders目录fader - gain),在它的第一帧代码的最后部分
sound.setVolume(level); 更改为_root.my_sound.setVolume(level);就可以了。
头像下的Display_mc,用来显示音乐的播放进度。也是嵌套的MC。
最后是控制按钮,分别为向前一曲,播放、下一曲、停止。
开始编写代码:
system.usecodepage=true;
使用系统默认编码格式
//===========================
my_xml=new xml();
my_xml.ignoreWhite=true;
my_xml.load("playList.xml");
//当xml加载的时候处理
my_xml.onLoad=function (s) {
if(s){
//得到根节点
rootNode=my_xml.firstChild;
//得到第一个子节点
currentNode=rootNode.firstChild;
//计算节点个数,即歌曲数目
nodeLength=rootNode.childNodes.length;
//当前序号
currentNum=1;
//取得属性
getAtt(currentNode)
}
}
//取得属性
getAtt=function (node) {
//取得名称
name=node.attributes.name;
//取得歌手名称
artist=node.attributes.artist;
//取得专辑名称
album=node.attributes.album;
//取得文件名
file=node.attributes.file;
//取得JPG文件名称
jpgFile=node.attributes.jpgFile;
}
//计算下一个节点
nextNode=function () {
//如果当前节点有同级的下一个节点
if(currentNode.nextSibling!=null){
//当前节点改为下一个
currentNode=currentNode.nextSibling;
//取得当前节点的属性
getAtt(currentNode)
//序号加1
currentNum++;
}
}
//更改当前节点为上一个节点,并取得属性,参看NextNode函数
preNode=function () {
if(currentNode.previousSibling!=null){
currentNode=currentNode.previousSibling;
getAtt(currentNode)
currentNum--;
}
}
//加载图片并且更改为temp_mc的大小。
loadJpg = function () {
//判断是不是为当前歌曲设置了图片
if (_root.jpgFile != null) {
//隐藏缺省图片
temp_mc._visible = 0;
//建立加载图片的mc
_root.createEmptyMovieClip("Jpg_mc", 1);
//加载图片文件
_root.jpg_mc.loadMovie(_root.jpgFile);
//放置到缺省位置
_root.jpg_mc._x = temp_mc._x;
_root.jpg_mc._y = temp_mc._y;
//用OnEnterFrame事件判断是否已经加载完毕,如果加载完毕JPG_MC的宽度不
//为0;
onEnterFrame = function () {
if (_root.jpg_mc._x != 0) {
//将图片更改高宽为需要的大小
_root.jpg_mc._width = temp_mc._width;
_root.jpg_mc._height = temp_mc._height;
}};
} else {
//如果没有设置JpgFile那么显示缺省的图片;
temp_mc._visible = 1;
_root.jpg_mc.unloadMovie();
}
};
//=========
//声音部分
//建立对象
my_sound=new sound();
//下面四个函数我们需要的四个按钮控制函数。
//播放声音
playSound=function () {
//定义一个_root.isplaying来确定当前是否有歌曲播放,如果没有便播放。
if(!_root.isplaying){
//加载系统中的默认歌曲。
my_sound.loadSound(_root.file);
//开始播放
my_sound.start();
//停止playSound功能
_root.isplaying=true;
}
}
//停止声音
stopSound=function () {
//如果有歌曲播放就停止声音
if(_root.isplaying){
my_sound.stop();
_root.isplaying=false;
}
}
//播放上一首歌
preSound=function () {
//转换上一节点为当前节点并分析变量
preNode();
//停止当前在播放的文件
stopSound();
//播放声音
playSound();
}
//参考preSound
nextSound=function () {
nextNode();
stopSound();
playSound();
}
//==========btn
//四个按钮对应我们编写的四个函数。
play_btn.onRelease=playSound;
stop_btn.onRelease=stopSound;
pre_btn.onRelease=preSound;
next_btn.onRelease=nextSound;
//下面是用来控制Display_mc显示声音播放的进度
_root.onEnterFrame=function () {
// 得到声音共多少秒
var a=my_sound.duration/1000;
//已经播放多少秒
var b=my_sound.position/1000;
//显示进度。
_root.disPlay_mc.tmp_mc._width=(b/a)*100
}
也许大家觉得看代码太长了,其实看着注释,慢慢看下来你会发现其实代码也很简单。
好啦,如果有不懂的地方可以给我写信,Actionscripts@hotmail.com
相关文件:
点这儿打开相关文件:
点这儿打开