论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

妙用_root._url(解决"flash与URL的问题")

文章类别:Flash | 发表日期:2008-9-21 15:10:22

  
      时下很多人用CenFun Music Player播放器(论坛:http://bbs.cenfun.com/),并把它引到QQ空间,给爱扮QQ空间的Q族们炫了一把.前几天用千千静听的WMP11皮肤做背景做了个flashMP3播放器,视觉效果还不错.并把它放到   http://bbs.cenfun.com/dispbbs.asp?BoardID=2&ID=2710&replyID=9167&skin=1/里展览,没想到很多人说这播放器漂亮,要我给他们.我想作品能得到大家的喜欢,当然是件兴奋的事,给就给吧.(首先说明下我flashMP3播放器包含的文件:eote.swf和songs.xml,eote.swf是flashMP3,songs.xml是外部更新mp3信息文件).
      不过很快就收到他们反映的问题:在存放flashMP3播放器的空间上是可以播放的,但把eote.swf引到QQ空间或其他论坛时就播放不了.我检查了一遍,发现引用到QQ空间或其他论坛时载入不了songs.xml,因为我是在flash中是这样载入ongs.xml的:myxml=new XML();myxml.load("songs.xml")用的是相对路径,这样当把eote.swf引到其他地方时,自然就不能载入songs.xml了,自然也就不能播放了.既然找到了问题,就要解决它.也许你会说,把myxml.load("songs.xml")改成绝对路径不就行了吗?对,没错,这样是行了,但当这个播放器放于不同的空间时,songs.xml的地址也就不同了,这时就不得一个个来改myxml.load("songs.xml")的绝对路径了,这样做实在是太麻烦了!一两个还行,上百上千上万个那还不得累个半死.
      我的想法就是:有没有办法让eote.swf来检测songs.xml的绝对路径,这样就不必每换一个存放空间就改一次.有了绝对路径,eote.swf引到其他地方时也能播放.有了想法,但要解决这个问题对我来说还是有点难,想好久也没想通,我就上论坛求助.
cenfun论坛:http://bbs.cenfun.com/dispbbs.asp?boardID=2&ID=2779&page=1
闪吧论坛:http://space.flash8.net/bbs/thread-318889-1-1.html
经典论坛:http://bbs.blueidea.com/thread-2710072-1-2.html
蓝屋的快闪分坛:http://www.hslk.com/lkbbs/dispbbs.asp?boardID=2&ID=9195&page=1
      由于表达不是很清楚,致使大家很多人都不知我要问什么.问题也就得不到解决.在回答我的问题中,经典论坛的一位坛友给了我启示:_root._url. 查看帮助,了解到_url是检索创建的 SWF 文件的 URL,我用trace(_root._url),发现返回的是该SWF 文件的绝对地址.有爱好的朋友的可以做个试验:在主场景创建一个动态文本,实例名为:testurl_txt,在第一帧写AS:
testurl_txt.text=_root._url;
导出名为testurl.swf文件,放到空间上去,会发现返回的是testurl.swf绝对路径.那么,放在http://hcf214236.808.nuno.cn/空间的eote.swf的绝对地址就是http://hcf214236.808.nuno.cn/eote.swf(你这话不是废话吗?),至此我们学会了在flash怎样获得eote.swf文件的绝对地址(用_root._url). 这时有人就问了,你获得eote.swf的绝对地址有什么用,和songs.xml文件有关系吗?有关系,这关系相当的大了,因为eote.swf文件和songs.xml是放在同一目录的(假设是这样的),那么songs.xml的绝对路径就是http://hcf214236.808.nuno.cn/songs.xml(又是废话一句).有了eote.swf的绝对路径,我们应该怎样让eote.swf自己判定songs.xml的绝对路径呢?我们再看看eote.swf和songs.xml的绝路径:http://hcf214236.808.nuno.cn/eote.swfhttp://hcf214236.808.nuno.cn/songs.xml,仔细看后,会发现  http://hcf214236.808.nuno.cn/这部分是相同的.既然找到了共同点,那就好办了,我们只要把 http://hcf214236.808.nuno.cn/eote.swf拆分为两部分,http://hcf214236.808.nuno.cn/和eote.swf,把第一部分加在songs.xml的前面,就得songs.xml的绝对路径了(怎么还是废话啊!),
myxml=new XML();
myxml.load("http://hcf214236.808.nuno.cn/"+"songs.xml")
总结一下:
原理就是这样:首先通过_root._url获得eote.swf的绝对路径,然后把eote.swf的绝对路径分割为和eote.swf两部分.把 附加到songs.xml的后面(前提是eote.swf和songs.xml必须在同一目录).获得eote.swf的绝对路径我们已经解决了,接下来的就是把eote.swf的绝对路径分割为和eote.swf两部分提到分割,可能很多人都会想到String里的split方法,该方法是:
split(String.split 方法),public split(delimiter:String, [limit:Number]) : Array. 在指定的 delimiter 参数出现的所有位置断开String 对象,将其拆分为子字符串,然后以数组形式返回子字符串。假如使用空字符串 ("") 作为分隔符,则该字符串中的每个字符都将作为一个元素放入到数组中。假如未定义delimiter 参数,则会将整个字符串放入返回的数组的第一个元素中。既然知道了方法,我们还等什么,赶紧动手吧!在第一帧写AS:
var rooturl_String = new String(_root._url);
//定义String对象,并把_root._url的值作为字符串附加给这个对象.
var rooturl_Array = rooturl_String.split("testurl.swf");
//以testurlswf为分割符,把_root._url的值拆分为两个子符串,并存放在rooturl_Array数组里.
var testxml = new XML();
//定义XML对象
testxml.ignoreWhite = true;
//忽略空白
System.useCodepage = true;
//防止载入外部文本时出现乱码
testxml.load(rooturl_Array[0]+"test.xml");
//把rooturl_Array的第一部分附加在test.xml后面,这样就得到test.xml的绝对路径了
testxml.onLoad = function(success) {
if (success) {
  testxml_txt.text = testxml;
} else {
  testxml_txt.text = "载入出错!请检查";
}
};
第二步:创建个动态文本,实例名为:testxml_txt
第三步:导出swf文件,命名为testurl.swf(一定要为testurl.swf)
第四步:创建名为test.xml的xml文件,(也一定要为test.xml), test.xml里的内容如下:
<?xml version="1.0" encoding="GB2312" ?> 
   <data>
   你想要输入的内容
   </data>
第五步:在本地或上传到空间去测试.
至此,问题就搞定了.非凡要注重:testurl.swf和test.xml要在同一目录,放在空间时,要在根目录里.这样做的好处是,任何人把testurl.swf和test.xml放在空间的根目录,再引用到其他地方时就不必在fla文件里改test.xml的地址了.这样省去了很多麻烦. 当然有利也有弊,这样轻易暴露xml文件的地址,被他人窃取.分割_root._url的方法还有很多种,像以"."号分割,"/"分割,原理都是一样,我是看那种方法简单就用那种了.
     _root._url的用处还有很多,在这里,我只就解决自己的问题学习了一下_root._url,在这里就算是抛砖引玉吧,假如大家有什么好的方法,请踊跃发表.学无止境!

     正确的思路+正确的方法=成功                                                                         
                                                                                                       作者:hcf214236   QQ:17638974     07.1.6
视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058