Форум 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=107754)

Nicolas Prof 08.02.2008 17:23

Внешний прелоадер
 
есть две swf (loader.swf и gallery.swf) с Document class'ами.

При окончании загрузки gallery.swf, получаю следующую ошибку:
Цитата:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Gallery()
Gallery() это конструктор:
Код:

                public function Gallery() {
                        /*stage.scaleMode = StageScaleMode.SHOW_ALL;
            stage.align = StageAlign.TOP_LEFT;
                       
                        getConfig("./lib/config.xml");
                        */
                       
                }

поначалу думал, что ошибка из за того что stage еще не доступен. Закомментировал. Ошибка таже.
В чем проблема?
Класс Load, который загружает gallery.swf имеет следующий вид:
Код:

package prof{
        import flash.net.*;
        import flash.display.*;
        import flash.events.*;
        import flash.filters.*;
        import flash.geom.*;

        public class Load extends MovieClip {
               
                private var _loader:Loader;
                private var _preloader:Sprite;
                private var _dropShadow:DropShadowFilter;
                private var _lodWidth:Number;
                private var _lodHeight:Number;
                private var _gradientFill:Boolean;
               
                public function Load() {
                        _gradientFill = false;
                        drawLoader();
                        load("gallery.swf");
                }
                public function drawLoader():void {
                        var bar:Sprite=new Sprite();
                        bar.name = "bar";
                        var strip:Sprite=new Sprite();
                        _dropShadow = new DropShadowFilter(1,45,0x000000,0.7,5,5,0.5,3,true,false,true);
                        _lodWidth = 200;
                        _lodHeight = 5;
                        _preloader=new Sprite();
                        ...откоцано :) ...

                        _preloader.addChild(strip);
                        _preloader.addChild(bar);
                        addChild(_preloader);
                       
                }
                public function load(urlMain:String):void {
                                var url:URLRequest=new URLRequest(urlMain);
                                _loader=new Loader();
                                addChild(_loader);
                                _loader.load(url);
                                _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
                                _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoading);
                }
               
               
                //EVENTS
                private function onLoading(e:ProgressEvent):void {
                        _preloader.getChildByName("bar").width = _lodWidth * e.bytesLoaded / e.bytesTotal;
                }
                private function onComplete(e:Event):void {
                       
                }

        }
}


Kuruki 24.09.2008 14:47

Такая же проблема выдает
Цитата:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at pages::Main$iinit()
Вот только нет у моего класса Main метода init(). В чем дело, подскажите пожалуйста!

BARTLEBY 24.09.2008 15:09

Nicolas Prof:
1)вы наверное не скомпилировали свф после внесения изменений.
2)а почему вы задаете настройки стейджа в подгружаемой свф? когда, (имхо) их нужн задать изначально.
------
Kuruki:
вам советую все что в конструкторе у вас есть протрейсить, сразу станет ясно почему выводится ошибка.

Kuruki 24.09.2008 15:34

Да, действительно, проблема была в доступе к stage (в подгружаемой флэшке). Спасибо.

wvxvw 24.09.2008 16:19

Делал темплейт для ФД с внешним прелоадером, вроде пока проблем не было...
http://www.flashdevelop.org/communit...php?f=9&t=3623
Если кому нужно

netic 10.08.2009 08:58

Цитата:

Сообщение от Kuruki (Сообщение 766047)
Да, действительно, проблема была в доступе к stage (в подгружаемой флэшке). Спасибо.

а как решил проблему? у меня так же :confused:

marat_sa 10.08.2009 09:13

Попробуй обработчик вешать не на COMPLETE, а на INIT

netic 10.08.2009 09:29

Отдельная флеха с классом main.loader

Код AS3:

package main 
        {
    import flash.events.*;
    import flash.net.*;
        import flash.display.*;
 
    public class loader extends MovieClip
                {                       
                public var l:Loader;
                public function loader()
                        {                                       
                        l = new Loader();
                        l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loop);
                        l.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
 
                        l.load(new URLRequest('app.swf'));
                        }
 
                function loop(e:ProgressEvent):void
                        {
                        var prec:Number = e.bytesLoaded / e.bytesTotal;
                        precent.text = Math.ceil(prec*100).toString();
                        }
 
                function done(e:Event):void
                        {
                        removeChildAt(0);
                        precent = null;
                        addChild(l);
                        }                       
                }
        }

и флешка контент - app.swf

с классом main.application

Код AS3:

package main 
        {
        import main.*;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.display.BitmapData;
        import flash.display.Shape;
        import flash.events.MouseEvent;
        import flash.ui.Mouse;
 
 
    public class application extends Sprite
                {               
                public static  var stage:Stage;
                public var floorW:int = 1000;
                public var floorH:int = 1000;
                var x0:int = 0;
                var y0:int = 0;
                var divX0:int = 0;
                var divY0:int = 0;
                public var startMove:Boolean=false;
 
                public function application()
                        {                       
                        Mouse.hide();
 
                        ....
                        }
                }
        }

после загрузки прелоадера выдает ошибку:

Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at main::application()

Добавлено через 2 часа 21 минуту
решил проблему:

у меня было так:
Код AS3:

                        stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDOWN);
                        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUP);
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMOVE);

убрал просто
Код AS3:

stage.


Zimok 05.10.2009 19:14

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

посоветуйте как решить

etc 05.10.2009 21:48

Показывайте код.


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

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