0

フォト ギャラリーを作成しなければならないクラスの課題があり、規定の 1 つは、画像を外部ソースからロードする必要があるというものです。私たちの割り当てからの参照コードは次のとおりです。

var myRequest:URLRequest = new URLRequest("bw1.jpg");
myLoader.load(myRequest); 
addChild(myLoader); 

私の特定のニーズでは、一度に最大 2 つの画像のコピーを画面に表示する必要があります。1 つはサムネイルとして、もう 1 つはフルサイズの画像です。ユーザーがサムネイルをクリックすると、画像の新しいインスタンスが作成され、アルファ 0 でフルサイズにスケーリングされ、現在選択されている画像のアルファが減少し、新しい画像のアルファが増加します。古い写真が見えなくなったら、ステージから削除されます。

actionscript でイメージのコピーを作成する方法を理解するのに苦労しています。また、エラー メッセージが表示されていなくても、for ループが 1 回しか繰り返されないため、適切に実行されていないようです。

これがペーストビン経由の私のコードへのリンクです: http://pastebin.com/iadgKgsk

import flash.display.Bitmap;

//creates a loader for each picture to be loaded, I know I could have an empty array  
that I add to but created a full array to test.

var loaders:Array = [new Loader(),new Loader(), new Loader(), new Loader(), new
Loader(), new Loader(), new Loader(), new Loader(), new Loader(), new Loader()];
 //stores the url request for each image to be loaded

var Requests:Array =[new URLRequest("pic1.jpg"),new URLRequest("pic2.jpg"),new 
URLRequest("pic3.jpg"),
new URLRequest("pic4.jpg"),new URLRequest("pic5.jpg"),new URLRequest("pic6.jpg"), new  
URLRequest("pic7.jpg"),
new URLRequest("pic8.jpg"), new URLRequest("pic9.jpg"),new URLRequest("pic10.jpg")];



//creates 2 empty arrays one to store the thumbnail sized pics the other fullsized.    
Ideally I want one Array holding the bitmap data and the other holding the thumbnail 
 instances since I only need 2
// fullsized images at a time I can just create a new one and erase the old one in a 
single function.

var pics:Array = new Array();
var pics2:Array = new Array();

//defines an empty bitMap variable as a placeholder for which to copy from redefined in
 every iteration of the loop

var test:Bitmap;

//loops through every loader
for (var i in loaders);
{
        // loads the loader and url request and creates a picture
        loaders[i].load(Requests[i]);

        //waits for the pic to load 
        loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

        //after loader is loaded create pic from the data
        function loadComplete(evt:Event):void
       {
            var i = "Test";
            trace(i);
            test= evt.target.content as Bitmap;
            pics2[i] = test;
            pics[i] =new Bitmap(test.bitmapData);
            pics2[i] =new Bitmap(test.bitmapData);

    //creates an image on the stage at runtime to help debug

    var pic1 = new Bitmap(test.bitmapData);
            addChild(pics[i])
            pic1.scaleX = 0.138427734375;
            pic1.scaleY = 0.1384114583333333;
            pic1.x = 204;
            pic1.y = 20.6;
            pic1.alpha = .25;

            var pic2:Bitmap = new Bitmap(test.bitmapData);
            pic2.x =100;
            pic2.y =100;
            pic2.scaleX =.33;
            pic2.scaleY=.33;
            addChild(pic2);            
            loaders[i].contentLoaderInfo.removeEventListener(Event.COMPLETE,     
            loadComplete)
        }
}
4

1 に答える 1

0

あなたの for ループは、あなたが望むものではないローダーインスタンスの各プロパティを反復しようとするように設定されています。他の AS3 バルク ローダー オプションを調査することもできます。これを処理するためのスクリプトが既にいくつか用意されています。

ループは次のようになります

for(var i=0; i<loaders.length; i++)
{
    var curLoader = loaders[i].load(Requests[i]);

たくさんの画像フリップブック スタイル アニメーション (ブレンダーで生成された画像) を読み込む、私がまとめた例も見ることができます。

http://www.shaunhusain.com/DrawTextRandomly/

http://www.shaunhusain.com/DrawTextRandomly/srcview/

utils.imageLoader パッケージを見てください。画像のロードを処理する 2 つのクラスを作成しました。それらは連続したファイル名で Blender から出力されたためです。いくつかのループを使用して、数値カウンターに基づいて画像をロードしました。画像のソース配列を使用してロードするように切り替えます。

BatchImageLoader クラスには、作成できるローダーの数の変数があります。メモリとロード時間の点でパフォーマンスの違いを確認したかったのです (ランタイム環境にも依存しますが、一般的なアイデアを得たいと思ったので終了しました)。最大90個のローダーを使用するままにしておきます)。

于 2013-07-19T03:17:27.607 に答える