来自XML的AS3随机图像 - 永不重复

时间:2013-03-13 16:42:41

标签: actionscript-3 flash flash-cs5 flash-cs4 banner

我正在flash中创建横幅广告,一旦页面加载,就会显示XML文件中的3个随机图像。我的问题是偶尔会重复。我已经包含了我的代码,任何建议?


var pHeight:Number = 84;
var pWidth:Number = 120;


var listLoader:URLLoader = new URLLoader( new URLRequest("www.example.com/example.xml") );
var picLoader:Loader = new Loader();

listLoader.addEventListener(Event.COMPLETE, gotList);

function gotList(evt:Event):void {
    var xmlData:XML = XML(listLoader.data);
    var numImages:Number = xmlData.picture.length();
    var stImage:String = xmlData.picture[Math.floor(numImages*Math.random())].toString();

    picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, gotPic);
    picLoader.load( new URLRequest(stImage) );

    listLoader.removeEventListener(Event.COMPLETE, gotList);
}

function gotPic(evt:Event):void {
    var thisBmp:Bitmap = Bitmap(evt.target.content);
    thisBmp.x = 0;
    thisBmp.y = 0;
    var thisWidth:Number = thisBmp.width;
    var thisHeight:Number = thisBmp.height;

    thisBmp.scaleX = pWidth/thisWidth;
    thisBmp.scaleY = pHeight/thisHeight;
    addChild(thisBmp);

    picLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, gotPic);
}

1 个答案:

答案 0 :(得分:0)

如评论中所述,您需要将XML从MovieClip加载到主/文档类中(或者如果您正在处理时间轴,则可以将其放在那里......我不是在纵容这种行为,我只是希望能够回答你的问题而不论你的方法。)

一次加载XML后,您可以从那里抓取图像,将它们放入Array,然后对其进行随机排序:

var images:Array = [];
for each(var imgObj:XML in xml.img){
    images.push(imgObj.toString());
}
images.sort(function(a:Object,b:Object):int{return Math.random() > .5 ? -1 : 1})

您可能需要修改上面的代码以适应XML的格式。

您要做的下一件事是在MovieClip上创建一个公共方法,以便您为该剪辑设置图像:

function setPic(stImage:String):void {
    picLoader = new Loader();
    picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, gotPic);
    picLoader.load( new URLRequest(stImage) );
    addChild(picLoader);
}

最后,您可以使用此setPic方法在MovieCilp的每个实例上设置图片:

for(var i:int = 0; i < images.length; i++)
{
    this["mc"+(i+1)].setPic(images[i]); 
}

这假定您的MovieClip个实例(mc1mc2等)具有某种命名惯例