我正在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);
}
答案 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
个实例(mc1
,mc2
等)具有某种命名惯例