Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   возврат битмапа после загрузки (http://www.flasher.ru/forum/showthread.php?t=206351)

JekelSkaz 29.01.2014 17:42

возврат битмапа после загрузки
 
Привет, пытаюсь написать простой класс загрузки внешних изображений. Не могу понять как реализовать возврат методом класса изображения после его загрузки. Вызов dno.getBitmap() сразу после обьявления класса не возвращает битмап, поскольку он не загружен...как правильно реализовать это, желательно чтобы затрагивать только LoaderImg.as
суть в том, чтобы класс LoaderImg вернул Bitmap

Сейчас это выглядит так:
main.as
Код AS3:

package {
 
        import flash.display.*;
        import flash.events.*;
        import flash.system.LoaderContext;
        import flash.net.URLRequest;
        import LoadImg;
 
        public class Main extends Sprite {
 
                public function Main():void {
                        if (stage) {
                                init();
                        } else {
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }
                }
 
                public function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        var dno:LoadImg = new LoadImg("https://www.google.com.ua/images/srpr/logo11w.png");
                        stage.addChild(dno.getBitmap());
                }
        }
}

LoaderImg.as
Код AS3:

package {
 
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Loader;
        import flash.events.Event;
        import flash.net.URLRequest;
 
        public class LoadImg {
 
                public var imgB:Bitmap;
 
                public function LoadImg(url:String):void {
                        var loader:Loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                        loader.load(new URLRequest(url));
                }
 
                private function onComplete (event:Event):void {
                        var imgBD = event.target.content.bitmapData;
                        this.imgB = new Bitmap(imgBD);
                }
 
                public function getBitmap():Bitmap {
                        return this.imgB;
                }
        }
}


samana 29.01.2014 17:54

Наверно правильнее будет сделать как и в обычном лоадере, ждать события полной и успешной загрузки картинки и только потом добавлять на сцену.

JekelSkaz 29.01.2014 17:57

Цитата:

Сообщение от samana (Сообщение 1158375)
Наверно правильнее будет сделать как и в обычном лоадере, ждать события полной и успешной загрузки картинки и только потом добавлять на сцену.

суть в том, чтобы класс LoaderImg вернул Bitmap
я могу передать stage и запихать в него изображение посде загрузки в самом классе LoaderImg, но это не то, что мне нужно

myakushka 29.01.2014 18:02

он вернет вам Bitmap, когда закончит загрузку

KBAC 29.01.2014 18:03

Код AS3:

package {
 
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Loader;
        import flash.events.Event;
        import flash.net.URLRequest;
 
        public class LoadImg {
 
                public var imgB:Bitmap;
 
                public function LoadImg(url:String):void {
                        this.imgB = new Bitmap();
                        var loader:Loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                        loader.load(new URLRequest(url));
                }
 
                private function onComplete (event:Event):void {
                        var imgBD = event.target.content.bitmapData;
                        this.imgB.bitmapData = imgBD;
                }
 
                public function getBitmap():Bitmap {
                        return this.imgB;
                }
        }
}


JekelSkaz 29.01.2014 18:12

Цитата:

Сообщение от KBAC (Сообщение 1158380)
Код AS3:

package {
 
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Loader;
        import flash.events.Event;
        import flash.net.URLRequest;
 
        public class LoadImg {
 
                public var imgB:Bitmap;
 
                public function LoadImg(url:String):void {
                        this.imgB = new Bitmap();
                        var loader:Loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                        loader.load(new URLRequest(url));
                }
 
                private function onComplete (event:Event):void {
                        var imgBD = event.target.content.bitmapData;
                        this.imgB.bitmapData = imgBD;
                }
 
                public function getBitmap():Bitmap {
                        return this.imgB;
                }
        }
}


Работает, спасибо большое. Получается при вызове dno.getBitmap() на сцену добавляется пустой битмап, а потом он заполняется. не думал что битмап заполнится автоматически при таком сценарии) Спасибо еще раз

MikroAcse 29.01.2014 18:22

Вы добавляете на сцену битмап, который используется в лоадере.
Если бы Вы сделали .clone(), такого бы не случилось и битмап не "заполнился".

JekelSkaz 29.01.2014 18:30

да, логично) спасибо всем за помощь


Часовой пояс GMT +4, время: 10:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.