レス数: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);
}
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にしかならないのと同じです。
座標や、幅、高さをセットしないと反映されないかも。
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);
}
ただし、ロードが完了してからでないエラーが出るので注意が必要です。
例えば、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();
});
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 |