前几天看见一位朋友制作了一个xml的link,真的很不错,但是由于是text的,很多地方都无法利用,所以我就做了一个和mc结合的,因为xml可以和任何语言结合,所以在做大型网站的时候非常有用,大家可以先看一下效果: http://220.198.78.234 开始动手做了: 1创建一个xml文件,取名叫nav.xml
2 创建一个fla,取名叫nav.fla 先做一个mc,取名叫button1_,然后在linkage选项的export for action script打对构,给这个mc取名叫buttonA。 再做一个叫button1的button(不是mc),按照你的喜好设置on,over,release,和down 3 在这个mc里面有三个层 第一层是as,就是写代码用的 第二层是text,就是放置button上面的文字 第三层是button,就是那个button1的button 4 创建简单运动给这个button1,例如加速入场 5 回到场景scene,这个时候你的场景scene应该是空白的。 建立两个层,一个是as,一个是button层,并在其上面随意创建两个button,这个是为了调用两个分类的 6 在as层第一帧加入
stop(); var myLinks = new XML();//创建XML对象 myLinks.load("nav.xml");//加载外部的XML文件 myLinks.ignoreWhite = true;//忽略空格 myLinks.onLoad = parseXML;//测试XML的格式 var unLoadArray = new Array();//预卸载的MC的Array function parseXML (success){ if (success) { // Check for a malformed XML document if (this.status != 0) { trace("The XML document was invalid. Error: "+this.status); return; } if(this.firstChild.nodeName.toLowerCase() != "navlinks"){ trace("Sorry, Unexpect beginning node name " + nav_array); return; } parseXMLContent = true; //navText = parseXMLContent; //return parseXMLContent; } } function parseLinks(sectionNum) { if(parseXMLContent == true){ nav_array = myLinks.firstChild.childNodes; //trace(nav_array.length); //for(l = 0;l < nav_array.length; l++){ var links_id=nav_array[sectionNum].attributes.id; //output section id trace("current section is " + links_id); //extract child nodes to array var links_array = nav_array[sectionNum].childNodes; //parse link node for(i=0;i<links_array.length;i++){ //fetch nodeName var link_array = links_array[i].childNodes; var buttonID = i; //子button的ID var buttonNum = links_array.length; //子button的数量 parseNameNode(link_array,links_id,buttonID,buttonNum,sectionNum); } } } function parseNameNode (name_array,links_id,buttonID,buttonNum,sectionNum){ for(n=0;n<name_array.length;n++){ //trace(name_array); var address_node = name_array[n].nodeName; //fetch node names if(address_node == "name"){ var address_name = name_array[n].firstChild.nodeValue; }else{ var address_value = name_array[n].firstChild.nodeValue; //已经提取了name和value变量后开始加载button mc _root.attachMovie("buttonA", links_id + "_button" + buttonID, 11+buttonID); //加载一个子button _root[links_id + "_button" + buttonID]._x = _root[links_id + "_button" + buttonID]._width*buttonID + _root["nav"+sectionNum]._x - buttonNum*10; //放置button的x位置 这一个子button的所在的位置 + 本身所在的上层button的位置 - 子button数量×10(使位置比较居中) _root[links_id + "_button" + buttonID]._y = 80; _root[links_id + "_button" + buttonID].buttonText = address_name; //加载子button的名称 _root[links_id + "_button" + buttonID].buttonURL = address_value; //加载子button的地址 _root.unLoadArray[buttonID] = links_id + "_button" + buttonID; //把这个子button加入预卸载的array里面 } //trace(""); //trace(address_name + " " + address_value); //trace(""); } } function removeUnloadMC(unloadArray){ for(u = 0; u < unLoadArray.length; u ++){ var unloadMC = unLoadArray[u] removeMovieClip(unloadMC);//里面不能放置array的成员 navText += unloadMC + " Have removed ";//帮助信息 } } 7 在场景scene里面的那两个button上面加as 第一个
on(rollOver){ removeUnloadMC(unloadArray); parseLinks(0); } on(rollOut){ navText =""; } 第二个
on(rollOver){ removeUnloadMC(unloadArray); parseLinks(1); } on(rollOut){ navText =""; } 8 发布nav.swf并且和nav.xml放在同一个目录 9 测试一下吧 |