[英]Parallel image loading in a single class instance with AS3
當我嘗試在 AS3 中的一個 class 中加載多個圖像時,就會出現我的問題。
我的代碼看起來像這樣:
// Load image 1
var ldr1:Loader = new Loader();
ldr1.contentLoaderInfo.addEventListener(Event.COMPLETE, complete1);
ldr1.load(new URLRequest("img1.jpg"));
// Load image 2
var ldr2:Loader = new Loader();
ldr2.contentLoaderInfo.addEventListener(Event.COMPLETE, complete2);
ldr2.load(new URLRequest("img2.jpg"));
// Load image 3
var ldr3:Loader = new Loader();
ldr3.contentLoaderInfo.addEventListener(Event.COMPLETE, complete3);
ldr3.load(new URLRequest("img3.jpg"))
我的問題是,每個完整方法都會收到相同的圖像。 有時他們都得到img1.jpg
,有時他們都得到img3.jpg
...。
我不知道為什么會這樣。
我很感謝你能給我的任何幫助。
這是我使用的確切代碼:
Class CuboidBookView
public function addBackMaterial(url:String):void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBMComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void {});
loader.load(new URLRequest(url));
}
private function onBMComplete(e:Event):void {
var bmp:Bitmap = Bitmap(LoaderInfo(e.target).content);
backMaterial = new BitmapMaterial(bmp.bitmapData);
hidden = false;
}
public function addFrontCoverMaterial(url:String):void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFCMComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void {});
loader.load(new URLRequest(url));
}
private function onFCMComplete(e:Event):void {
var bmp:Bitmap = Bitmap(LoaderInfo(e.target).content);
frontCoverMaterial = new BitmapMaterial(bmp.bitmapData);
}
public function addRearCoverMaterial(url:String):void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onRCMComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void {});
loader.load(new URLRequest(url));
}
private function onRCMComplete(e:Event):void {
var bmp:Bitmap = Bitmap(LoaderInfo(e.target).content);
rearCoverMaterial = new BitmapMaterial(bmp.bitmapData);
}
這些方法在另一個 class 中調用:
CuboidBookView(book.view).addBackMaterial("../res/books/" + b.file + "_back.jpg");
CuboidBookView(book.view).addFrontCoverMaterial("../res/books/" + b.file + "_front.jpg");
CuboidBookView(book.view).addRearCoverMaterial("../res/books/" + b.file + "_rear.jpg");
編輯:我想,這會有所幫助,但結果相同:
public function addMaterials(name:String):void {
// Load background image
var ldr1:Loader = new Loader();
ldr1.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
var bm:Bitmap = e.currentTarget.content as Bitmap;
backMaterial = new BitmapMaterial(bm.bitmapData);
hidden = false;
});
ldr1.load(new URLRequest("../res/books/" + name + "_back.jpg"));
// Load front cover
var ldr2:Loader = new Loader();
ldr2.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
var fcm:Bitmap = e.currentTarget.content as Bitmap;
frontCoverMaterial = new BitmapMaterial(fcm.bitmapData);
});
ldr2.load(new URLRequest("../res/books/" + name + "_front.jpg"));
// Load rear cover
var ldr3:Loader = new Loader();
ldr3.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
var rcm:Bitmap = e.currentTarget.content as Bitmap;
rearCoverMaterial = new BitmapMaterial(rcm.bitmapData);
});
ldr3.load(new URLRequest("../res/books/" + name + "_rear.jpg"))
}
現在不同的位圖和加載器具有不同的名稱,並在同一個方法調用中調用。 事件處理程序現在是內聯的。
我無法弄清楚錯誤在哪里。
您的 complete1()、complete2() 和 complete3() 方法是什么樣的?
我要做的是通過以下方式從裝載機中保存 bitmap。
private function complete1(e:Event):void
{
var image:Bitmap = e.currentTarget.content as Bitmap;
}
然后使用這個 bitmap 來渲染你的圖像。
顯然對每個 bitmap 使用不同的變量。 我通常有一個 BitmapData 字典,一旦加載就會保存。
如果您發布的代碼正是您在程序中所擁有的,那么這應該可以正常工作。
在 Away3d 中實現Cube確實存在問題。 一些回調沒有保存。
我找到了重新實現整個 class 的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.