ActionScript 3:Load()和loadBytes()之后不会触发LoaderInfo COMPLETE事件

时间:2011-09-16 08:19:57

标签: actionscript-3 image event-handling

我正在尝试使用带有Loader对象的ActionScript加载PNG图像。这适用于某些图像(INIT和COMPLETE事件按预期触发),而对于其他一些图像则没有。我在this thread中读到了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位于同一文件夹中(不允许发布更多超链接)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是您的应用程序可能是为Flash Player 9编译的。在版本9中,允许的最大图像尺寸为2880 x 2800,map_us_big.png为3150 x 1570.我在为Flash Player编译应用程序时成功运行了应用程序10。

以下是参考http://help.adobe.com/en_US/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及更早版本,限制为2,880像素   高度为2,880像素宽。如果指定宽度或高度   如果值大于2880,则不会创建新实例。