经过一个下午的学习,设计了一xml的动态菜单。当然这种做法我本人觉得还是摆脱不了as2.0的阴影。初学者,也要努力去学习一下
Flash的处理事件的机制很多,今天遇见到一问题。就是为监听传参数问题。不知道怎样扩展events类。当中的存在的问题还是很多
下面看一下下面的代码学习:
首先准备好xml文件,这已经是老话题。设计的时候可以简单一些,目的就是让初学的容易上手一些
第一步:准备xml文件,名为Mymenu.XML
<?xml version="1.0" encoding="UTF-8"?>
<node>
<menu id="新闻" url="http://news.baidu.com/" />
<menu id="网页" url="http://www.baidu.com/" />
<menu id="贴吧" url="http://post.baidu.com/" />
<menu id="知道" url="http://zhidao.baidu.com/" />
<menu id="Mp3" url="http://mp3.baidu.com/" />
<menu id="图片" url="http://image.baidu.com/" />
</node>
下面在fla的帧里面写代码:
System.useCodePage=true;//防止乱码
var i:int=0;//计数器
var j:int;
var mymenu:Array=[menu1,menu2,menu3,menu4,menu5,menu6];//创建一个数组储存菜单
var mybutton:Array=[button1,button2,button3,button4,button5,button6];//存放button的
var myxml:XML=new XML();//创建xml对象
myxml.ignoreWhite = true;
var myrequest:URLRequest=new URLRequest("Mymenu.XML");
var loader:URLLoader=new URLLoader();
loader.load(myrequest);//加载xml文件
loader.addEventListener(Event.COMPLETE, loading);
function loading(e:Event):void{
trace("ok");
myxml=XML(loader.data);//转换成xml格式
for(i=0;i<mymenu.length;i++)//动态显示xml文件
mymenu[i].text=myxml.menu[i].@id;
//为每个按钮设置监听
mybutton[0].addEventListener(MouseEvent.CLICK, opening0);
mybutton[1].addEventListener(MouseEvent.CLICK, opening1);
mybutton[2].addEventListener(MouseEvent.CLICK, opening2);
mybutton[3].addEventListener(MouseEvent.CLICK, opening3);
mybutton[4].addEventListener(MouseEvent.CLICK, opening4);
mybutton[5].addEventListener(MouseEvent.CLICK, opening5);
function opening0(event:MouseEvent):void{
navigateToURL(new URLRequest(myxml.menu[0].@url));
}
function opening1(event:MouseEvent):void{
navigateToURL(new URLRequest(myxml.menu[1].@url));
}
function opening2(event:MouseEvent):void{
navigateToURL(new URLRequest(myxml.menu[2].@url));
}
function opening3(event:MouseEvent):void{
navigateToURL(new URLRequest(myxml.menu[3].@url));
}
function opening4(event:MouseEvent):void{
navigateToURL(new URLRequest(myxml.menu[4].@url));
}
function opening5(event:MouseEvent):void{
navigateToURL(new URLRequest(myxml.menu[5].@url));
}
trace(myxml.menu[0].@id);
trace(myxml.menu[1].@id);
trace(myxml.menu[2].@id);
trace(myxml.menu[3].@id);
trace(myxml.menu[4].@id);
trace(myxml.menu[5].@id);
}
以上的代码有点罗嗦,因为我很想为监听传一个参数去,但是还没有研究出来。。所以代码后面的写得不怎样简单化
下面我解析一下。。
先入为主:加载xml文件 这些就是简化的代码
System.useCodePage=true;//防止乱码
var myxml:XML=new XML();//创建xml对象
myxml.ignoreWhite = true;
var myrequest:URLRequest=new URLRequest("Mymenu.XML");
var loader:URLLoader=new URLLoader();
loader.load(myrequest);//加载xml文件
loader.addEventListener(Event.COMPLETE, loading);
function loading(e:Event):void{
//代码
}
当中使用的是flash.net里面包的类. 和xml类其中一个很常用的URLRequest,URLLoader两者要经常配合使用。其功能很显然:前者是负责地址上的工作,后者就是负责加载的工作
而xml对象就是解析工作的。这样理解起来会简单一些。
接下来,我在场景上创建了五个动态文本,分别名为menu1―――menu5
我用数组将它储存起来
var mymenu:Array=[menu1,menu2,menu3,menu4,menu5,menu6];//创建一个数组储存菜单
xml的解析工作:
myxml=XML(loader.data);//转换成xml格式
for(i=0;i<mymenu.length;i++)//动态显示xml文件
mymenu[i].text=myxml.menu[i].@id;
这段代码我先将下载回来的xml文件强行转换xml类型的。目的就是为了使用as 3.0xml的新的标准方法:
这myxml.menu[i].@id; 就是as3.0所支持的一种新读取方法。很简单。对照xml文件来看看
接下来我要为每个菜单进行一个按钮。我做了一个透明按钮,复制了六个分别名为
button1 ,―――button6
var mybutton:Array=[button1,button2,button3,button4,button5,button6];//存放button的名称
接下来就是为每个按钮添加连接进行监听。。。。。。。。。。。
mybutton[0].addEventListener(MouseEvent.CLICK, opening0);
mybutton[1].addEventListener(MouseEvent.CLICK, opening1);
mybutton[2].addEventListener(MouseEvent.CLICK, opening2);
mybutton[3].addEventListener(MouseEvent.CLICK, opening3);
mybutton[4].addEventListener(MouseEvent.CLICK, opening4);
mybutton[5].addEventListener(MouseEvent.CLICK, opening5);
好了,大概的xml动态菜单就这样了。当然还有一个很好的办法需要去改的是
我们可以为按钮的监听添加一个参数当我们按了那个按钮的时候就传一个int型的数据去进行选择
这是需要我们扩展event类。有兴趣的可以写一下的