用户堆栈溢出我正在努力通过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>
我目前的代码:
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);
答案 0 :(得分:1)
创建一个包含场地名称的数组。如果数据集太大或者只是从您的示例的硬编码值开始以使其工作,您可以以编程方式执行此操作。单击随机按钮时,请关闭该名称并使用它来选择下一个名称。这将避免必须检查哪些已经使用过,你只需从数组中剩余的未被查看的那些中选择。当用户选择最后一个并且数组为空时,重新初始化并继续。
答案 1 :(得分:0)
如果您不介意直接对您的xml进行随机播放以避免制作该名称的新副本,您可以使用像FicherYates之类的随机播放功能来随机播放您的数据。
你可以制作一个多功能的功能,每次点击一个新的场地时都会拾取,并在结束时重新开始。
这里是一个函数示例,每次响应click事件时都会选择一个随机元素:
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));
每次单击TextArea时,您都可以在wonderfl中看到它: http://wonderfl.net/c/aQ1D