1

ページが読み込まれると、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を1回ロードしたら、そこから画像を取得して、に配置し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

于 2013-03-13T21:00:34.137 に答える