AS3程序。 随机化项目的顺序组合框的XML(AS3 Procedural. Randomise

2019-11-02 20:10发布

我试图读取XML文件和所有的元素添加到组合框随机顺序(我不知道如何做到这一点)。 我公司生产的在舞台上的ComboBox称为Primary_CB。 我有我的XML都在下面的格式设置...

<data>

<elements>

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

</elements>

</data>

我的AS3基本上读取XML文件和内容填充到像这样的组合框...

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]);
}

我将如何使它随机元素的顺序,还可以在列表中添加的第一个元素的组合框的提示?

Answer 1:

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. 该值是从全局数组读入组合框
  5. 在组合框selectedIndex属性被设置为1(所以它突出在列表中的第一个对象)

下面是多种方法数组排序的页面。 在上面的示例中,我使用的拼接方法。 http://dev.tutsplus.com/tutorials/quick-tip-how-to-randomly-shuffle-an-array-in-as3--active-8776



Answer 2:

我会得到阵列中的所有元素推第一,然后洗牌他们, 然后将它们添加到CB。 洗牌数组是相当直截了当。 只需使用顶部的答案在这里(但使用AS3语法):

如何随机化(随机播放)JavaScript数组?

(你可以失去的Event.CHANGE事件监听和功能,除非你有其他的计划来使用它。)



文章来源: AS3 Procedural. Randomise order of Items in Combobox From XMl