在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");
        }
    }
}

也许我需要更详细地解释一下:

  • 创建一个新的Flash文件(Ctrl-N)
  • 打开“组件”面板(Ctrl-F7)
  • 打开“库”面板(Ctrl-L)
  • 将组件>用户界面>按钮拖到库中
  • 选择第一帧
  • 打开操作面板(F9)
  • 在这里粘贴第一位代码
  • 保存你的文件(Ctrl-S)
  • 创建一个新的ActionScript文件(Ctrl-N)
  • 粘贴第二位代码
  • 将您的文件保存在与“LinkBut​​ton.as”(Ctrl-S)相同的文件夹中
  • 回到你的电影(Ctrl-Tab)
  • 测试电影(Ctrl-Enter)
  • 我强烈建议你多接受一些培训。 李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