Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用actionscript获得随机场地,无需重复_Xml_Actionscript 3_Random_Random Access - Fatal编程技术网

Xml 使用actionscript获得随机场地,无需重复

Xml 使用actionscript获得随机场地,无需重复,xml,actionscript-3,random,random-access,Xml,Actionscript 3,Random,Random Access,嗨,stack overflow的用户们,我目前正在努力通过as3和xml随机化我的数据 我可以很好地加载xml并生成一个随机地点,但是当我单击我创建的随机按钮时,相同的节点会显示两次!基本上,我只想随机选择数据,如果有意义的话,不重复上一个场馆的数据 我的xml: <gallery> <venue> <name>1</name> <description>1</description>

嗨,stack overflow的用户们,我目前正在努力通过as3和xml随机化我的数据

我可以很好地加载xml并生成一个随机地点,但是当我单击我创建的随机按钮时,相同的节点会显示两次!基本上,我只想随机选择数据,如果有意义的话,不重复上一个场馆的数据

我的xml:

<gallery>
<venue>
        <name>1</name>
        <description>1</description>
        <picture>images/1.jpg</picture>
        <thumb>thumbs/1.jpg</thumb>
        <address>1</address>
        <website>http://1.co.uk</website>
</venue>

<venue>
        <name>2</name>
        <description>2</description>
        <picture>images/2.jpg</picture>
        <thumb>thumbs/2.jpg</thumb>
        <address>2</address>
        <website>http://2.co.uk</website>
</venue>

<venue>
        <name>3</name>
        <description>3</description>
        <picture>images/3.jpg</picture>
        <thumb>thumbs/3.jpg</thumb>
        <address>3</address>
        <website>http://3.co.uk</website>
</venue>
</gallery>

1.
1.
图片/1.jpg
拇指/1.jpg
1.
http://1.co.uk
2.
2.
图片/2.jpg
拇指/2.jpg
2.
http://2.co.uk
3.
3.
图片/3.jpg
拇指/3.jpg
3.
http://3.co.uk
我当前的代码:

var xml:XML = <venues>
<venue name="" description="" address="" website="" picture=""/>
<venue name="" description="" address="" website="" picture=""/> 
<venue name="" description="" address="" website="" picture=""/>
<venue name="" description="" address="" website="" picture=""/>
</venues>;

var Gallerylist:XMLList = new XMLList(xml.venue);

function RandomGallery(e:Event)
{
    var rand:int = Gallerylist.length() * Math.random();
    myTextBoxTitle.text = myXML.venue.name[rand]
    myTextBoxDes.text = myXML.venue.description[rand]
    myTextBoxAddress.text = myXML.venue.address[rand]
    myTextBoxWeb.text = myXML.venue.website[rand]
    myVenueImage.source = myXML.venue.picture[rand]
}
randomBTN.addEventListener(MouseEvent.MOUSE_DOWN, RandomGallery);
var-xml:xml=
;
var Gallerylist:XMLList=新的XMLList(xml.venture);
函数库(e:事件)
{
var rand:int=Gallerylist.length()*Math.random();
myTextBoxTitle.text=myXML.vention.name[rand]
myTextBoxDes.text=myXML.vention.description[rand]
myTextBoxAddress.text=myXML.Vincement.address[rand]
myTextBoxWeb.text=myXML.vention.website[rand]
myVenueImage.source=myXML.vention.picture[rand]
}
randomBTN.addEventListener(MouseEvent.MOUSE_DOWN,RandomGallery);

创建一个包含所有场馆名称的数组。如果数据集太大,或者只是从示例的硬编码值开始以使其工作,则可以通过编程方式执行此操作。单击“随机”按钮时,弹出名称并使用它选择下一个名称。这将避免必须检查哪些已被使用,而您只需从阵列中尚未查看的剩余部分中进行选择。当用户选择最后一个且数组为空时,重新初始化它并继续。

如果您不介意直接洗牌xml以避免创建名称的新副本,则可以使用类似的洗牌函数来洗牌数据

您可以创建一个多功能一体的功能,该功能将在每次单击新场地以及到达终点时重新启动

下面是一个函数示例,该函数将在每次响应单击事件时拾取一个随机元素:

var xml:XML = <venues>
<venue name="" description="" address="" website="" picture=""/>
<venue name="" description="" address="" website="" picture=""/> 
<venue name="" description="" address="" website="" picture=""/>
<venue name="" description="" address="" website="" picture=""/>
</venues>;


var fnShuffle:Function = function(xl:XMLList):Function {
 var len:int=xl.length();
 var lastUsedIndex:int;

 return function(e:MouseEvent):void{
   var i:int;

   if (len<=0) {
     // restart over since you have reached the end of the list
     len = xl.length();
     i = int(Math.random() * (len--));

     // in case of a new round you don't want to redisplay the last one again
     if (i == lastUsedIndex) i = len; 
   } else {
     i = int(Math.random() * (len--));
   }

   var myRandomVenue:XML = xl[i];
   var tmp:XML = xl[len];
   xl[i] = tmp;
   xl[len] = myRandomVenue;
   lastUsedIndex = len;

   // here do what you want with your randow venue
   trace(myRandomVenue);
 }
}

this.addEventListener(MouseEvent.CLICK, fnShuffle(xml.venue));
var-xml:xml=
;
var fnShuffle:Function=Function(xl:XMLList):Function{
变量len:int=xl.length();
var lastUsedIndex:int;
返回函数(e:MouseEvent):void{
变量i:int;

如果(Len您需要存储上一个选定场地的名称,以便与新创建的场地进行比较,如果它们匹配,请将其删除并重新创建。我对动作脚本不是特别熟悉,但您可能需要在选择时从“Gallerylist”中“切片”元素。您好,欢迎使用StackOverflow。请不要发布指向代码的链接,而是复制和粘贴此页面的代码。每个问题都需要自我包含,无需用户转到其他网站(可能在某个时间点消失)。我编辑了您的问题,并为您完成了编辑,因为我是一个好人:-)@John如果你还停留在这一点上,我回答了同样的问题,它确保你每次都能得到一个场地,而且它们都会随机返回。Patrick我已经实现了你的代码,但是我没有得到任何输出。使用跟踪和动态文本框!有什么想法吗?已经加载了XML等…很抱歉链接到另一个站点,我永远无法获得要正确显示的代码!抱歉Wouter van Nifterick:)@代码MyRandomVincement中的John是您要使用的XML节点,而name是属性而不是节点,因此应该使用@:
myTextBoxTitle.text=MyRandomVincement来访问它。@name
;这真的很奇怪,因为我仍然没有得到输出!我的完整代码就在这里,以防我在XML中加载不正确!舞台上我只有一个按钮名为randomBTN和文本框名为myTextBoxTitle!@john嗯,在您粘贴的代码中,您错过了加载XML文件的所有输入和输出,您必须添加事件侦听器以等待文件加载,然后才能使用它。我建议您查看如何在as3中加载XML文件。