ActionScript 3: событие LoaderInfo COMPLETE не запускается после load () и loadBytes () - PullRequest
0 голосов
/ 16 сентября 2011

Я пытаюсь загрузить изображения PNG с помощью ActionScript с помощью объекта Loader.Это отлично работает для некоторых изображений (события 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, а я компилирую с помощью as3compile SWFTools.

Вы можете увидеть скрипт в действии на http://www.wichte -sind-wichtig.de/as3loader/loaderTest.swf

Два изображения map_in_big.png и map_us_big.png находятся в одной папке (не разрешено размещать больше гиперссылок).

Любойидеи?

1 Ответ

1 голос
/ 16 сентября 2011

Проблема в том, что ваше приложение, вероятно, скомпилировано для Flash Player 9. В версии 9 максимально допустимые размеры изображения составляют 2880 x 2800, а map_us_big.png - 3150 x 1570. Я успешно запустил приложение, когда скомпилировал его для Flash Player10.

Вот ссылка 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 имеет ширину 8191 пиксель, он может иметь высоту только 2048 пикселов.) В Flash Player 9 и более ранних версиях и в AIR 1.1 и более ранних версиях ограничение составляет 2880 пикселов по высоте и 2880 пикселей по ширине.Если указать значение ширины или высоты, превышающее 2880, новый экземпляр не будет создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...