Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка изображения в CS4 (http://www.flasher.ru/forum/showthread.php?t=119521)

Валенок 23.12.2008 01:11

Загрузка изображения в CS4
 
Доброго времени суток, товарищи.
Есть код написанный в CS3, загружающий изображение. Картинка правда, должна находиться в той же папке, где и скомпилированая прога.


Код AS3:

var file:FileReference = new FileReference();
 
 
var _loader:Loader;
 
//отображение диалога открытия файла
function onShowloadDialog(event:Event):void
{
        var fileFilter:FileFilter = new FileFilter("Images", "*.jpg");
        try{
                filereference.browse([fileFilter]);
        }
        catch(illegalOperation:IllegalOperationError){
 
        }
}
 
//при выборе файла загружаем его
function onSelectFile(event:Event):void
{
        _loader =  new Loader();
        var tf:TextField = new TextField();
        tf.text = filereference.name;
 
        _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
        _loader.load(new URLRequest(filereference.name));
        trace(filereference.name);
}
 
 
//когда файл загружен производим с инфой необходимые нам действия
function onComplete(event:Event):void
{
 
        var image:Bitmap = Bitmap(_loader.content);
        bitmap = image.bitmapData;
        var myBitmap:Bitmap = new Bitmap ( bitmap );
 
 
}


В CS4 появился у класса FileReferece новый метод load(). С помощью кототорого можно загрузить картинку с любым путем.
Поэтому вышевыложеный код был переписан следущим образом:
Код AS3:

function onSelectFile(event:Event):void
{
        try{
        file.load();
        }
        catch(illegalOperation:IllegalOperationError)
        {
        }
}
 
 
function onComplete(event:Event):void
{
        _loader=new Loader();
        loader.loadBytes(file.data);
        var image:Bitmap = Bitmap(_loader.content);
 
}


Картинка теперь загружается из любого места, но(!) во время исполнения строчки:
var image:Bitmap = Bitmap(_loader.content);
Выдаеться следущая ошибка:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at kg_last_sasha_cs4_fla::MainTimeline/onComplete()
Если кто уже сталкивался с подобной проблемой, или просто знает решение, подскажите, пожалуйста, как решить.

silin 23.12.2008 11:01

для loadBytes тоже надо ловить завершение
Код AS3:

private function onComplete(event:Event):void
{
        _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadBytesComplete);
        _loader.loadBytes(file.data);
 
}
 
private function onLoadBytesComplete(e:Event):void
{
        var image:Bitmap = Bitmap(_loader.content);
        addChild(image);
}


yusrom 27.08.2009 12:17

Error #1009
 
Здравствуйте! Пробежал по разным форумам в поисках решения этой проблемы - ошибка 1009. К сожалению ничего вразумительного не нашёл, кроме этого поста.
Вот мой код MainGame.as
Код AS3:

package  
{
        //import caurina.transitions.Tweener;
 
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.SimpleButton;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.events.ProgressEvent;
 
        import flash.xml.XMLDocument;
        import flash.xml.XMLNode;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.display.Loader;
 
        public class MainGame extends MovieClip
        {
                private var sGame:DisplayObject; //бить
                private var bGame:DisplayObject; //ловить
                private var fGame:DisplayObject; //финал
                public  var tabl :DisplayObject; //таблица
 
                //xml
                var xmlData : XML = new XML();
                var loader : URLLoader = new URLLoader();
                public static var valuta : String;
                public static var priz : String;
                public static var note : String;
                public static var congratulation_text : String;
                public static var error : String;
                public static var prize : String;
                public static var congratulation : String;
                public static var send : String;
                public static var title : String;
                public static var timer : String;
                public static var confirm_txt : String;
                public static var prizeimg : String;
                public static var score : String;
                public static var urlsave : String;
                public static var coeff_one_point : String;
                public static var help1 : String;
                public static var help2 : String;
                public static var operators_label : Array;
                public static var operators_code  : Array;
 
 
                var loader_image : Loader;
                public var prize_img : MovieClip;
                public var prize2_text : MovieClip;
 
 
                public var prev_game : int = 0;
 
                public static var xml_loaded : Boolean = false;
 
 
 
 
                public function MainGame()
                {
                        stop();
                        stage.scaleMode = "noScale";
 
                        start_btn.visible = false;
 
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress, false, 0, true);
                        loaderInfo.addEventListener(Event.COMPLETE,        onInit,    false, 0, true);
                }
 
                private function hndlOnLoadXML(e:Event):void
                {
                        e.target.removeEventListener(Event.COMPLETE, hndlOnLoadXML, false);
                        xmlData = new XML(e.target.data);
                        //trace(xmlData);
 
 
                        valuta = "" + xmlData.itm.attribute("valuta");
                        priz  = "" + xmlData.itm.attribute("priz");
                        note  = "" + xmlData.itm.attribute("note");
                        congratulation_text = "" + xmlData.itm.attribute("congratulation_text");
                        error  = "" + xmlData.itm.attribute("error");
                        prize  = "" + xmlData.itm.attribute("prize");
                        congratulation = "" + xmlData.itm.attribute("congratulation");
                        send  = "" + xmlData.itm.attribute("send");
                        title  = "" + xmlData.itm.attribute("title");
                        timer  = "" + xmlData.itm.attribute("timer");
                        confirm_txt = "" + xmlData.itm.attribute("confirm_txt");
                        prizeimg    = "" + xmlData.itm.attribute("prizeimg");
                        score      = "" + xmlData.itm.attribute("score");
                        urlsave    = "" + xmlData.itm.attribute("urlsave");
                        coeff_one_point = "" + xmlData.itm.attribute("coeff_one_point");
                        help1      = "" + String(xmlData.help1);
                        help2      = "" + String(xmlData.help2);
 
                        operators_label = new Array();
                        operators_code  = new Array();
                        for each(var operator in xmlData.operators.operator)
                        {
                                operators_label.push(operator);
                                operators_code.push(operator.@code);
                        }
 
 
                        loader_image = new Loader();
                        //
 
                        loader_image.contentLoaderInfo.addEventListener(Event.COMPLETE, hndlOnLoadImage, false, 0, true);
 
                        try
                        {
                                loader_image.load( new URLRequest(prizeimg));
                        }
                        catch (error : Error)
                        {
                                trace("Unable to load prize image" + error);
                        }
 
 
                        xml_loaded = true;
                }
        private function hndlOnLoadImage(e:Event):void
                {
 
                        loader_image.removeEventListener(Event.COMPLETE, hndlOnLoadImage);                       
 
                        prize_img.addChild(loader_image);
 
 
                        prize2_text.x = -2;
                        prize2_text.y = 15;
                        prize2_text.txt.text = "" + prize;
                        prize_img.addChild(prize2_text);
 
 
                        start_btn.visible = true;
                        //Tweener.addTween(bg, { alpha:0, time:0.5 } );
                        bg.visible = true;
                        start_btn.addEventListener(MouseEvent.CLICK, onClick, false, 0, true);
                }
 
                private function onProgress(e:ProgressEvent) : void
                {
                        var loaded:Number = e.bytesLoaded / e.bytesTotal * 100;
                        preload.gotoAndStop(Math.round(loaded));
                }
                private function onInit(e:Event):void
                {
                        if (contains(preload))
                                removeChild(preload);
                        //
 
                        prize_img  = new MovieClip();
                        prize2_text = new prize2_txt();
 
                        loader.addEventListener(Event.COMPLETE, hndlOnLoadXML, false, 0, true);
                        try
                        {
                                loader.load(new URLRequest("parameters.xml"));
                        }
                        catch (error : Error)
                        {
                                trace("Unable to load xml: " + error);
                        }
                }
 
                private function onClick(e:MouseEvent):void
                {
                        start_btn.removeEventListener(MouseEvent.CLICK, onClick);
 
                        gotoAndStop(3);
 
                        var blockGame:Class = loaderInfo.applicationDomain.getDefinition("BlockGame") as Class;
                        bGame = (new blockGame()) as DisplayObject;
 
                        var shotGame:Class = loaderInfo.applicationDomain.getDefinition("ShotGame") as Class;
                        sGame = (new shotGame()) as DisplayObject;
 
                        var finalGame:Class = loaderInfo.applicationDomain.getDefinition("FilnalScreen") as Class;
                        fGame = (new finalGame()) as DisplayObject;
 
                        var Tabl:Class = loaderInfo.applicationDomain.getDefinition("Tablo") as Class;
                        tabl = (new Tabl()) as DisplayObject;
 
                        switchToGame(1);
                }
 
                public function switchToGame(g:int):void
                {
                        if (bGame != null && contains(bGame))
                                removeChild(bGame);
                        //
                        if (sGame != null && contains(sGame))
                                removeChild(sGame);
                        //
                        if (fGame != null && contains(fGame))
                        {
                                tablo.reset();
                                update();
 
                                removeChild(fGame);
                        }
                        //
 
 
                        Model.shots = 0;
                        tabl.visible = true;
 
                        var game:DisplayObject;
                        switch(g)
                        {
                                case 1: //удар
                                        //
                                        game = sGame;
                                        tabl.scaleX = tabl.scaleY = 1.0;
                                        tabl.x = 345;
                                        tabl.y43;
                                        tablo.keeperGame = false;
                                        break;
                                //
                                case 2: //ловля
                                        //
                                        game = bGame;
                                        tabl.scaleX = tabl.scaleY = 0.64;
                                        tabl.x = 408;
                                        tabl.y73;
                                        tablo.keeperGame = true;
                                        break;
                                //
                                case 3: //финал
                                        //
                                        Model.totalShots = 0;
 
                                        game = fGame;
                                        tabl.visible = false;
                                        tablo.reset();
                                        break;
                                //
                        }
 
 
                        if (g == prev_game + 1)
                                Model.is_read_help = true;
                        //
 
                        addChildAt(game, 0);
                        addChild(tabl);
 
                        prize_img.x = 1024 - 225;
                        prize_img.y = 15;
                        addChild(prize_img);
 
                        if (g == 3)
                        {
                                if(contains(prize_img))
                                        removeChild(prize_img);
                                //
                        }
 
 
                        prev_game = g;
                        if (prev_game == 3)
                                prev_game = 0;
                        //
 
                        //update();
                }
 
                public function update():void
                {
                        tablo.update();
                }
 
                public function get tablo() : Tablo
                {
                        return tabl as Tablo;
                }
 
        }
 
}

При компиляции выводится сообщение об ошибке
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at MainGame/hndlOnLoadImage()

А также не отображается кнопка start_btn.
Как я понял ошибка либо в функции hndlOnLoadImage() либо в соседней на несколько строк выше.
Подскажите, пожалуйста, решение проблемы!

yusrom 30.08.2009 20:44

При замене строчки
loader_image.contentLoaderInfo.addEventListener(Event.COMPLETE, hndlOnLoadImage, false, 0, true);
на строчку
loader_image.addEventListener(Event.COMPLETE, hndlOnLoadImage, false, 0, true);
ошибка 1009 не появляется, но и кнопка start_btn тоже.
Что делать, блин?

Skaylin 20.11.2010 11:05

Как я понимаю ответа никто тут не дождется))) НО самое смешное что я вот тоже сейчас столкнулся с той же проблемой, эта ошибка постоянно вылетает #1009 и как результат ссылка по которой я хочу перейти эту ошибку и вызыват. Я уже с этой кнопкой что только не предумывал, результат один- ошибка. Есть тут МОЗГ который доступно обьяснит в чем конкретно проблема?

Mur4ik 20.11.2010 12:06

Цитата:

Сообщение от Skaylin (Сообщение 951041)
Есть тут МОЗГ который доступно обьяснит в чем конкретно проблема?

Вот именно с этого нужно и начинать, доступно объяснить в чем конкретно проблема.
А уж после форумчане постараются подсказать ее решение.

А у вас получается "Я получаю ошибку - почему?". Да масса вариантов!!!
Показывайте код, прикрепляйте минимальные тестовые проекты, это же в ваших интересах, не так ли?

Аналогично код yusrom, ни как не информативен и мало что понятно что там создается руками во флеше (и есть ли оно вообще на сцене), а что программно.
Подписали loader_image.contentLoaderInfo, а отписываем loader_image, плюс загадка существуют ли вообще prize_img, prize2_text, start_btn, bg. Может что то из них и есть в данный момент null. Обычно при таких ошибках выдается номер строки кода приводящий к ошибке. Или выводите элементарные трейсы всех подозрительных объектов и смотрите что все они присутствуют и имеют необходимые свойства и методы.

-De- 20.11.2010 16:10

Доступно и конкретно, кэп думаю одобрит. Если у вас в коде есть что-то вида
mysmth.field
mysmth.method(...
mysmth[index]
и mysmth - это null или undefined, то возникает ошибка
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
По другим причинам не возникает.


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

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