AS3程序.xml的Combobox中项目的随机顺序



我试图读取XML文件,并以随机顺序将所有元素添加到组合(我不知道该怎么做)。我在舞台上产生了一个名为primary_cb的组合。我的XML全部设置为以下格式...

<data>
<elements>
    <element1>
        <primary>Male Character</primary>
    </element1>
    <element1>
        <primary>Female Character</primary>
    </element1>
</elements>
</data>

我的AS3基本上读取XML文件,并将内容填充到Combobox中,如So ...

Primary_CB.prompt = "Items";
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
var xmlAry:Array = new Array();
var xmlURL:Array = new Array();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest("IdeaElements.xml"));
function LoadXML(e:Event):void
{
    xmlData = new XML(e.target.data);
    trace(xmlData..primary.length());
    for (var i:uint=0; i<xmlData..primary.length(); i++)
    {
        xmlAry.push(xmlData..primary[i]);
        xmlURL.push(xmlData..url[i]);
        Primary_CB.addItem( { label: xmlAry[i], data:i } );
        Primary_CB.addEventListener(Event.CHANGE, action);
    }
}
function action(e:Event):void
{
    var no:Number = Number(Primary_CB.selectedItem.data);
    trace(xmlURL[no]);
}

我将如何使其随机化元素的顺序,并将列表中的第一个元素添加到combobox的提示中?

Primary_CB.prompt = "Items";
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
var xmlAry:Array = new Array();
var xmlURL:Array = new Array();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest("IdeaElements.xml"));
function LoadXML(e:Event):void
{
    xmlData = new XML(e.target.data);
    trace(xmlData..primary.length());
    var tempXMLAry:Array = new Array();
    var tempUrlAry:Array = new Array();
    var i:uint;
    for (i = 0; i<xmlData..primary.length(); i++)
    {
        tempXMLAry.push(xmlData..primary[i]);
        tempUrlAry.push(xmlData..url[i]);
    }
    var tLen:int = tempXMLAry.length; // Store that value as it is here, because it will change during the loop
    for (i = 0; i < tLen; i++) {
        var rnd:int = Math.round(Math.random() * (tempXMLAry.length - 1));
        xmlAry.push(tempXMLAry[rnd]);
        xmlURL.push(tempUrlAry[rnd]);
        tempXMLAry.splice(rnd, 1);
        tempUrlAry.splice(rnd, 1);
    }
    for (i = 0; i < xmlAry.length; i++) {
        Primary_CB.addItem( { label: xmlAry[i], data:i } );
    }
    Primary_CB.selectedIndex = 0;
    Primary_CB.addEventListener(Event.CHANGE, action);
}
function action(e:Event):void
{
    var no:Number = Number(Primary_CB.selectedItem.data);
    trace(xmlURL[no]);
}

这就是我想出的。它与您已经拥有的非常相似。发生的是:

  1. 创建了一对额外的临时数组
  2. 这些数组是从XML列表中填充的
  3. 这些阵列被整体阵列
  4. 这些值是从全局阵列中读取到Combobox
  5. Comboboxes selectedIndex属性设置为1(因此它突出显示了列表中的第一个对象)

这是一个具有多种分类数组的页面。在上面的示例中,我使用了剪接方法。http://dev.tutsplus.com/tutorials/quick-tip-tip-how-to-randomly-shuffle-an-aray-aray-in-as3- active-8776

我会首先推动数组的所有元素,然后将它们送上它们,然后将它们添加到CB中。洗牌的阵列相当简单。只需在此处使用最佳答案(但使用AS3语法):

如何随机化(洗牌)JavaScript数组?

(您可能会丢失事件。更改EventListener&amp;功能,除非您还有其他计划可以使用它。)

最新更新