問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:4 / 状態:未解決 / No:18 / ATOM
1 名前:kuro 日付:2010/04/27(火)05:35:52 ID:uthxW2cZy9w6
よろしくお願いします。
loader.load(urlRequest)で読み込んだ画像をaddchild(loader)すると画像を表示させることができますが、1回のロードで複数表示させることは可能でしょうか?
以下のようなコードでは1つしか表示されませんでした。

var urlRequest: URLRequest = new URLRequest("image/image.png");
var loader: Loader = new Loader();
loader.load(urlRequest);
for(var i:int = 0; i < 10; i++){
var sp: Sprite = new Sprite();
sp.x = math.random() * this.stage.stageWidth;
sp.y = math.random() * this.stage.stageHeight;
sp.addChild(loader);
}

デバッカでコードを追うと、どうやら最後に作られたスプライト(の位置)だけ表示されるようです。
多分以下のようにコーディングすれば複数表示可能なのでしょうが、同じ画像を何度もロードするのは如何なものかと・・・

for(var i:int = 0; i < 10; i++){
var urlRequest: URLRequest = new URLRequest("image/image.png");
var loader: Loader = new Loader();
loader.load(urlRequest);
var sp: Sprite = new Sprite();
sp.x = math.random() * this.stage.stageWidth;
sp.y = math.random() * this.stage.stageHeight;
sp.addChild(loader);
}
2 名前:ううむ 日付:2010/04/27(火)14:01:13 ID:6bUIa6bNwgog
読込が終わるのを監視して、終わったタイミングで
座標や、幅、高さをセットしないと反映されないかも。

 0*10は0にしかならないのと同じです。 
3 日付:2010/04/28(水)18:41:58 ID:FvWvj9X1IqLa
loaderが10個のSpriteのうちのひとつにしか存在できないからですね。
例えば、a・b・cというSpriteがあったとして、
a.addChild(c);
b.addChild(c);
っていうのは
a.addChild(c);
a.removeChild(c);
b.addChild(c);
と同じで、結局bの中にだけcがある状態になります。

Spriteの数だけ画像が必要になってくるのですが、
わざわざ何回もロードしなくても、画像を複製しちゃえばいいんです。

var bmpData:BitmapData = new BitmapData(loader.width,loader.height,true,0);
bmpData.draw(loader);
for(var i:int = 0; i < 10; i++){
var sp: Sprite = new Sprite();
sp.x = Math.random() * this.stage.stageWidth;
sp.y = Math.random() * this.stage.stageHeight;

var bmp:Bitmap = new Bitmap(bmpData);
sp.addChild(bmp);
}

ただし、ロードが完了してからでないエラーが出るので注意が必要です。
4 日付:2010/04/28(水)19:04:15 ID:2iuB4losX8Zs
>>3の方法が一番だと思いますが

Loaderで読み込んだデータからByteArrayを取り出してさらに生成することもできます。
ただし、生成する数だけメモリを消費する上、完了までに時間が掛かります。

var urlRequest: URLRequest = new URLRequest("image.png");
var loader: Loader = new Loader();
loader.load(urlRequest);

var info : LoaderInfo = loader.contentLoaderInfo;
info.addEventListener(Event.INIT,function(e:Event):void{

var num = 0;

function ImageLoad(){
var mem: Loader = new Loader();
mem.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{

var sp: Sprite = new Sprite();
addChild(sp);
sp.x = Math.random() * stage.stageWidth;
sp.y = Math.random() * stage.stageHeight;
sp.addChild(mem);

num ++;
if(num > 10)return;

ImageLoad();
});

mem.loadBytes(info.bytes);
}

ImageLoad();
});
このスレッドについて
質問の状態 :
未解決
投稿開始日 :
2010/04/27(火)05:35:52
投稿終了日 :
2010/04/28(水)19:04:15
投稿者 :
kuro
レス総数 :
4
スレッド番号 :
18
MondoCollectionSystem ver.0x00020000 by Hakuhin