簡體   English   中英

ActionScript 3:在load()和loadBytes()之后,不會觸發LoaderInfo COMPLETE事件

[英]ActionScript 3: LoaderInfo COMPLETE event doesn't fire after load() and loadBytes()

我正在嘗試使用帶有Loader對象的ActionScript加載PNG圖像。 這對於某些圖像(按預期觸發了INIT和COMPLETE事件)效果很好,而對於其他一些圖像則沒有效果。 我已經在該線程中閱讀到URLLoader可能會有所幫助,因此我在以后使用loadBytes()函數進行了嘗試。 仍然不起作用:URLLoader會觸發COMPLETE事件,但LoaderInfo對象卻不會。

我編寫了一個示例類,用兩個文件演示了這個問題(一個工作,另一個不工作)。

public class LoaderTest extends MovieClip {
    var output:TextField;
    var loader:Loader;
    var urlLoader:URLLoader;

    function LoaderTest() {
        output = new TextField();
        output.width = 1000;
        output.height = 1000;
        output.multiline = true;
        addChild(output);

        var t1:Timer = new Timer(0, 0);
        t1.addEventListener(TimerEvent.TIMER, function() {
            t1.stop(); loadMapDirect("map_in_big.png");
        });

        var t2:Timer = new Timer(1000, 0);
        t2.addEventListener(TimerEvent.TIMER, function() {
            t2.stop(); loadMapDirect("map_us_big.png");
        });

        var t3:Timer = new Timer(2000, 0);
        t3.addEventListener(TimerEvent.TIMER, function() {
            t3.stop(); loadMapBytes("map_in_big.png");
        });

        var t4:Timer = new Timer(3000, 0);
        t4.addEventListener(TimerEvent.TIMER, function() {
            t4.stop(); loadMapBytes("map_us_big.png");
        });

        t1.start();
        t2.start();
        t3.start();
        t4.start();

    }

    function loadMapBytes(url:String):void {
        try {
            urlLoader = new URLLoader();
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.addEventListener(ProgressEvent.PROGRESS, progressListener);
            urlLoader.addEventListener(Event.COMPLETE, completeListenerBytes);

            output.appendText("\nLoading '"+url+"' with URLLoader ");
            urlLoader.load(new URLRequest(url));
        } catch (error:Error) {
            output.appendText("Err: " + error.message + "\n");
        }

    }

    function completeListenerBytes(e:Event):void {
        output.appendText("COMPLETE Event fired for URLLoader!\n");

        try {
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListenerDirect);
            output.appendText("Loading bytes with Loader ");
            loader.loadBytes(e.target.data as ByteArray);
        } catch (error:Error) {
            output.appendText("Err: " + error.message + "\n");
        }
    }

    function loadMapDirect(url:String):void {
        try {
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListenerDirect);

            output.appendText("\nLoading '"+url+"' with Loader ");
            loader.load(new URLRequest(url));
        } catch (error:Error) {
            output.appendText("Err: " + error.message + "\n");
        }
    }

    function completeListenerDirect(e:Event):void {
        var bmd:BitmapData = Bitmap(e.target.loader.content).bitmapData;
        output.appendText("COMPLETE Event fired for Loader! => h: " +  bmd.height + ", w: " + bmd.width + "\n");
    }

    function progressListener (e:ProgressEvent):void{
        output.appendText(".");
        if (e.bytesLoaded == e.bytesTotal) {
            output.appendText(" progress complete, " + e.bytesTotal + " bytes loaded!\n");
        }
    }
}

所有圖像都是使用PHP GD庫生成的,而我正在使用SWFTools的as3compile進行編譯。

您可以在http://www.wichte-sind-wichtig.de/as3loader/loaderTest.swf上查看正在運行的腳本

兩個圖像map_in_big.png和map_us_big.png位於同一文件夾中(不允許發布更多超鏈接)。

有任何想法嗎?

問題是您的應用程序可能是為Flash Player 9編譯的。在版本9中,允許的最大圖像尺寸為2880 x 2800,map_us_big.png為3150 x1570。為Flash Player 10編譯應用程序時,我成功運行了該應用程序。

這是參考http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#BitmapData%28%29

在AIR 1.5和Flash Player 10中,BitmapData對象的最大大小為寬度或高度為8,191像素,並且像素總數不能超過16,777,215像素。 (因此,如果BitmapData對象的寬度為8,191像素,則只能為2,048像素。)在Flash Player 9和更早版本以及AIR 1.1和更早版本中,限制是高度為2880像素,寬度為2880像素。 如果您指定的寬度或高度值大於2880,則不會創建新實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM