在flash cs3中从xml文件创建动态导航
我想将一个xml文件交给swf,让swf为xml文件中的每个链接生成一个动态文本框和按钮
一个基本的导航
这里是xml
<?xml version="1.0" encoding="UTF-8"?>
<page>
<page name="Page Name 1" url="/page-1/" />
<page name="Page Name 2" url="/page-2/" />
<page name="Page Name 3" url="/page-3/" />
<page name="Page Name 4" url="/page-4/" />
</page>
在我的fla中,我的库中有一个名为'nav_button'的按钮
有一个名为actions的图层,并在第1帧中有这个
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
var button:Button = new Button();
xmlLoader.load(new URLRequest("links.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void
{
xml = XML(event.target.data);
xmlList = xml.children();
trace(xml.length());
for(var i:int = 0; i < xmlList.length(); i++)
{
button = new Button();
button.x = 25;
button.y = i * 50 +25;
addChild(button);
}
}
xml可以正常导入,但是当涉及到for循环并将按钮和文本框添加到舞台时,我会敬酒
您的xml文件无效。 它只能包含一个根节点。
尝试这个:
<?xml version="1.0" encoding="UTF-8"?>
<pages>
<page name="Page Name 1" url="/page-1/" />
<page name="Page Name 2" url="/page-2/" />
<page name="Page Name 3" url="/page-3/" />
<page name="Page Name 4" url="/page-4/" />
</pages>
这是你的第一帧的代码:
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
xmlLoader.load(new URLRequest("links.xml"));
function xmlLoaded(event:Event):void {
var pages:XML = new XML(event.target.data);
var i:int = 0;
for each (var page:XML in pages.page) {
var button:LinkButton = new LinkButton();
button.x = 25;
button.y = i * 50 + 25;
button.label = page.attribute("name");
button.url = page.attribute("url");
addChild(button);
trace(i++);
}
}
你需要一个自定义按钮类:
package {
import fl.controls.Button;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class LinkButton extends fl.controls.Button {
public var url:String;
public function LinkButton(){
super();
this.addEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(mouseEvent:MouseEvent) {
flash.net.navigateToURL(new URLRequest(url), "_blank");
}
}
}
也许我需要更详细地解释一下:
我强烈建议你多接受一些培训。 李Brimelows网站是一个很好的开始。
我意识到这是旧的,但今天对我来说是新的。
我不明白你为什么要创建一个自定义按钮类。 我不认为有必要完成你想要做的事情。
function xmlLoaded(event:Event):void {
var pages:XML = new XML(event.target.data);
var i:int = 0;
for each (var page:XML in pages.page) {
var button:LinkButton = new LinkButton();
button.x = 25;
button.y = i * 50 + 25;
button.label = page.attribute("name");
button.url = page.attribute("url");
addChild(button);
trace(i++);
}
}
上面的函数就好,但为什么不在for循环中添加事件侦听器呢? 添加行:
button.addEventListener(MouseEvent.CLICK, gotoURL);
在for循环中,然后添加该函数:
function gotoURL(e:MouseEvent):void
{
navigateToURL(new URLRequest(e.target.url));
}
这将消除创建外部文件和自定义类的需要。
链接地址: http://www.djcxy.com/p/17803.html上一篇: create dynamic navigation from xml file in flash cs3
下一篇: AS3 Flash app reading online XML doesn't update. Possibly Cache related