循环浏览XML并使用按钮返回开始-AS3

循环浏览XML并使用按钮返回开始-AS3,xml,actionscript-3,flash,Xml,Actionscript 3,Flash,我正在尝试创建一个小应用程序,只需按一个按钮(下一步或上一步)即可循环浏览XML文档。到目前为止,我已经完成了循环并将信息导入ok。当它到达XML中的最后一条记录并点击next按钮时,我希望它显示第一条记录。它目前正在这样做,但是你必须按下按钮两次。它只是一个小XML文件,有5条记录 顺便说一下,这是动作脚本3 import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import fl

我正在尝试创建一个小应用程序,只需按一个按钮(下一步或上一步)即可循环浏览XML文档。到目前为止,我已经完成了循环并将信息导入ok。当它到达XML中的最后一条记录并点击next按钮时,我希望它显示第一条记录。它目前正在这样做,但是你必须按下按钮两次。它只是一个小XML文件,有5条记录

顺便说一下,这是动作脚本3

import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.MouseEvent;

var myXML:XML;
var myLoader:URLLoader = new URLLoader;

myLoader.load(new URLRequest("book.xml"));

myLoader.addEventListener(Event.COMPLETE, processXML);

var i:int;
i = 0;

function processXML(e:Event):void
{
    myXML = new XML(e.target.data);

    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

btnNext.addEventListener(MouseEvent.MOUSE_DOWN, moveNext);
function moveNext(event:MouseEvent)
{
    if (i == 5)

    {
        i = 0
    }

    else

    i = i + 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

btnPrevious.addEventListener(MouseEvent.MOUSE_DOWN, movePrevious);
function movePrevious(event:MouseEvent)
{   

    if (i == 0)
    {
        i = 5
    }

    else

    i = i - 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}
希望这是有意义的,如果我需要更多的解释,我会尽我所能


干杯

您的问题是,在尝试循环之前,您需要等待
i==5
(因此需要按两次“下一步”按钮。因为您处理的是一个索引为零的元素列表,所以当
i==4
时,您实际上是最后一个元素(您的元素编号为0、1、2、3、4)

如果您将
i==5
更改为
i==4
,这应该可以按预期工作,但是,正如我在上面的评论中提到的,您不应该硬编码这个数字。您应该像这样从XML中获取它:

function moveNext(event:MouseEvent)
{
    if (i == myXML.film.length()-1)

    {
        i = 0;
    }

    else

    i = i + 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}
这样,如果您的
XML
发生了变化,并且突然出现了多于或少于5条记录,那么代码仍然可以工作

编辑以回应OP的评论:

由于您在将
i
用作索引之前正在递减,因此不希望将其重置为
length-1
。相反,您只需将其设置为
length

function movePrevious(event:MouseEvent)
{   

    if (i == 0)
    {
        i = myXML.film.length();
    }

    else

    i = i - 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

您从何处获取数字5?我假设这是记录数,但从
XML
文档中获取该信息可能更有意义,而不是硬编码该值。您好@Marcela-非常感谢您的回答。下一步按钮正在工作,感谢您向我介绍.length属性的正确用法。我一直在尝试对“上一条”按钮执行相同的操作(因此,当您到达第一条记录时,它会跳回到最后一条记录),但是我不确定这是如何工作的?我理解长度()-1表示找不到任何记录,并且i=0会将其发送到第一条记录,但如何硬编码以跳转到最后一条记录?我已更新了答案,使用
length
方法将更正的
movePrevious
方法包括在内。非常感谢@Marcela。提高了我对Actionscript的理解!)