as3 按钮通过xml文件从外部添加链接网址后,想用其中一个按钮链接swf文件,出现错误。请高手帮忙~非常感谢!
第一步:新建AS3文件,保存,命名为LinkBtn.fla
第二步:在舞台上建立三个按钮,分别取实例名为 btn1 btn2 btn3
第三步:为LinkBtn.fla指定文档类为 LinkBtn,并保存
第四步:建立LinkBtn.as文件,与LinkBtn.fla保存在同一目录,键入如下代码
JScript codepackage {
import flash.display.Sprite;
import flash.events.Event;
import flash.display.SimpleButton;
import flash.net.URLLoader;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
public class LinkBtn extends Sprite {
private var _btn1:SimpleButton;
private var _btn2:SimpleButton;
private var _btn3:SimpleButton;
private var _link:XML;
public function LinkBtn() {
this.addEventListener(Event.ADDED_TO_STAGE,onAddedToStage);
}
private function onAddedToStage(e:Event):void{
this._btn1 = this.getChildByName("btn1") as SimpleButton;
this._btn2 = this.getChildByName("btn2") as SimpleButton;
this._btn3 = this.getChildByName("btn3") as SimpleButton;
this._btn1.addEventListener(MouseEvent.CLICK,btnOnClick);
this._btn2.addEventListener(MouseEvent.CLICK,btnOnClick);
this._btn3.addEventListener(MouseEvent.CLICK,btnOnClick);
var uloader:URLLoader = new URLLoader();
uloader.addEventListener(Event.COMPLETE,onComplete);
uloader.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
uloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSeError);
uloader.load(new URLRequest("LinkBtn.xml"));
}
private function onComplete(e:Event):void{
try{
this._link = new XML(e.target.data);
}catch(err:Error){
trace("LinkBtn.xml 格式错误");
}
}
private function onIOError(e:IOErrorEvent):void{
trace("LinkBtn.xml 文件不存在");
}
private function onSeError(e:SecurityErrorEvent):void{
trace("安全冲突,无法加载 LinkBtn.xml");
}
private function btnOnClick(e:MouseEvent):void{
var btn:SimpleButton = SimpleButton(e.target);
if(this._link){
var tmp:XMLList = this._link.child(btn.name);
if(tmp.length()>0 && tmp[0].text() != ""){
flash.net.navigateToURL(new URLRequest(tmp[0].text()),"_blank");
}
}
}
}
}
第五步:建立LinkBtn.xml文件,与Flash文件保存在同一目录,内容如下
XML code<LinkBtn>
<btn1>http://community.csdn.net/</btn1>
<btn2>http://www.google.com.hk</btn2>
<btn3>http://www.blueidea.com</btn3>
</LinkBtn>
非常感谢csdn里diffmaker高手的代码,我想在其中一个按钮点击链接外部的swf文件,如果我是在空白fla文件里添加按钮,为其动作里敲入以下代码:
this._btn.addEventListener(MouseEvent.CLICK,onclick);
function onclick(e:MouseEvent){
var picloader:Loader=new Loader();
var picfile:URLRequest=new URLRequest("logo.swf");
picloader.load(picfile);
picloader.contentLoaderInfo.addEventListener(Event.COMPLETE, picloaded);
picloader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,picloaderror);
}
function picloaded(e:Event){
this.addChild(e.target.loader);
}
function picloaderror(e:IOErrorEvent){
trace("lost")
}
点击按钮可以链接外部swf文件,但是,我要是在参照上面代码做好多个按钮以后就会出现:
编辑器错误:场景1,图层‘按钮’帧1,3行 1046找不到类型,或者他不是编译时常数:Loader.
场景1,图层‘按钮’帧1,3行 1180调用的方法可能未定义。
LinkBtn.as 1180:调用的方法addFrameScript可能未定义。
把 import flash.display.Sprite;
换成 import flash.display.MovieClip 又有了新的错误
明明是在btn_里添加动作的,添加后自己跑到多个按钮层上加代码,很奇怪。请教各位高手~非常感谢!
[解决办法]
编辑器错误:场景1,图层‘按钮’帧1,3行 1046找不到类型,或者他不是编译时常数:Loader.
场景1,图层‘按钮’帧1,3行 1180调用的方法可能未定义。
LinkBtn.as 1180:调用的方法addFrameScript可能未定义。
你使用了Loader类,那么就需要导入它:import flash.display.Loader
另外,使用文档类后,最好不要再在帧上添加动作,在文档类中添加。
至于文档类继承Sprite还是MovieClip,要看你的Flash文件有多少帧(主时间轴),若只有一帧,用Sprite,多帧则用MovieClip,Sprite属于轻量级,占用资源要少。