我想知道是否可以實現任何邏輯以使圖像完成加載而不會凍結。flex 4 - 等待加載完成而不凍結
爲了我的應用程序,我創建了一個類,它在構造函數中使用圖像url,並使用「load()」函數加載mx.controls.Image。
見下
package com
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
//import flash.net.URLRequest;
import mx.controls.Alert;
import mx.controls.Image;
//import mx.utils.OnDemandEventDispatcher;
public class SpriteImage extends Sprite
{
//Pass the source path or url here.
private var imageUrl:String;
private var ready:int = -1;
private var img:Image;
public function SpriteImage(imgUrl:String)
{
//imageUrl = imgUrl;
loadImage(imgUrl);
}
private function loadImage(imgUrl:String):void
{
img = new Image();
img.addEventListener(Event.COMPLETE,onCompleteHandler);
img.addEventListener(IOErrorEvent.IO_ERROR,onErrorHandler);
//img.source = imgUrl;
img.load(imgUrl);
}
private function onCompleteHandler(e:Event):void{
img.x = -(img.width/2);
img.y = -(img.height/2);
this.addChild(img);
ready = 1;
}
private function onErrorHandler(e:IOErrorEvent):void
{
ready = 0;
//Alert.show("Can't load :" + e.toString());
}
public function prepare():Boolean{
while(ready == -1){
trace(0);
}
return ready;
}
}
}
類現在,我使用這個類從主應用程序像這樣
var img:SpriteImage = new SpriteImage(e.imageUrl);
img.prepare(); // just waits till image is loaded but freezes
var obj:DisplayObject = img;
現在的問題是,應用從未出來的準備()方法。它凍結了瀏覽器,我不得不殺死插件進程來解凍應用程序。
這裏的主要標準是我需要等待圖像完成加載,以便我可以在接下來的步驟中訪問圖像。我怎樣才能做到這一點。?請幫助
安東的答案是在正確的方向。 Flash得到正確的一件事是強制執行異步外部調用,這意味着一個**必須使用回調/事件偵聽器才能正確執行程序,這就是確保(或者至少鼓勵程序員以這種方式實現的方式) )UI將會響應。就我個人而言,我發現Doug Crockford在[Loopage](http://www.youtube.com/watch?v=6yn9HqtBW_U)上的演講對於啓發爲什麼這實際上是一件好事,而不僅僅是一個任意構思的模式,煩擾。 – merv