Загруженный объект, по-видимому, является нулевым после того, как функция Event.complete в contentLoaderInfo запустилась? - PullRequest
0 голосов
/ 25 августа 2011

У меня проблема с классом, над которым я работаю.В настоящее время я загружаю изображение как растровое изображение и сохраняю его данные в regState: BitmapData, чтобы впоследствии я мог создать новые экземпляры этого изображения.Когда я проверяю, могу ли я использовать загруженные данные позже с моей функцией newBitmapIntance (), он говорит, что regState имеет значение null.Я заблудился относительно того, почему это так, поскольку он работает безупречно для создания своего экземпляра в моей функции loadContent ().В любом случае, я могу успешно сохранить мои загруженные растровые данные для дальнейшего использования?

Класс до сих пор Для справки:

package  {

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.display.Loader;
    import flash.display.Bitmap;
    import flash.display.BitmapData;

    public class MyObj extends MovieClip
    {
        private var regState:BitmapData;

        public function MyObj() 
        {

        }
        public function loadImage(url:String):void
        {
            var urlRequest:URLRequest = new URLRequest(url);
            var imgLdr:Loader = new Loader();
            imgLdr.load(urlRequest);
            imgLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadContent);
        }

        private function setRegState(temp:BitmapData):void
        {
            this.regState = temp.clone();
        }
        public function getRegState():BitmapData
        {
            return this.regState;
        }

        private function loadContent(event:Event)
        {
            var temp:Bitmap = event.target.content as Bitmap;
            this.setRegState(temp.bitmapData);

            this.addChild(newBitmapIntance());
        }

        public function newBitmapIntance():Bitmap
        {
            var temp:Bitmap = new Bitmap(this.getRegState());

            return temp;
        }
}

1 Ответ

0 голосов
/ 25 августа 2011

Рефакторинг MyObj:

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLRequest;

    public class MyObj extends MovieClip
    {
        private var _bitmapData:BitmapData;

        public function loadImage(url:String):void
        {
            var urlRequest:URLRequest = new URLRequest(url);
            var imgLdr:Loader = new Loader();
            imgLdr.load(urlRequest);
            imgLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadContent);
        }

        public function clone():MovieClip
        {
            var newClip:MovieClip = new MovieClip();
            newClip.addChild( new Bitmap( _bitmapData.clone() ) );
            return newClip;
        }

        public function MyObj() 
        {

        }

        private function loadContent(event:Event):void
        {
            this._bitmapData = Bitmap(event.target.content).bitmapData;
            this.dispatchEvent( new Event( "imageLoaded" ) );
        }
    }
}

Используйте это из другого класса:

package
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;

    public class Test extends Sprite
    {
        private var _factory:MyObj;

        public function Test()
        {
            _factory = new MyObj();
            _factory.loadImage( "test.jpg" );
            _factory.addEventListener( "imageLoaded", imageLoaderHandler );
        }

        private function imageLoaderHandler( e:Event ):void
        {
            var one:MovieClip = _factory.clone();

            this.addChild( one );

            var two:MovieClip = _factory.clone();
            two.x = 100;
            two.y = 100;

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