1

我正在 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);
}
4

1 回答 1

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等)

于 2013-03-13T21:00:34.137 回答