Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null" (http://www.flasher.ru/forum/showthread.php?t=207533)

iters 21.04.2014 23:13

Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"
 
Здравсвуйте,давно начал писать игру и вот уже все близится к завершению, но никак не могу собрать все уровни в одни файл. у меня есть класс Config где содержатся все главные методы и функции ,которые являются неким "позвоночником" и классы lvl1 , lvl2 , lvl3.. lvl16 , в которых я вызываю методы и свойства класса Config , эти классы и есть уровни в моей игре, далее(когда я писал уровни и не задумывался как буду все это сибить из-за недостатка опыта) я в файле game.fla в панеле properties ставил классы lvl1 или lvl2 .lvl16(зависит какой именно уровень хочу я запустить) и все работало, но теперь мне нужно запускать файлы уровней в файле файле game.fla из actionscript кода (var gameLvl:lvl5 = new lvl5();) , при этот возникает ошибка :

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Config$/createWallStage()
at lvl16()
at lvl_fla::MainTimeline/frame1()


части кода файла Config и ,например, файла lvl5 ниже

Код AS3:

package  
{
        import Box2D.Collision.ClipVertex;
        import Box2D.Collision.Shapes.b2CircleShape;
        import Box2D.Collision.Shapes.b2MassData;
        import Box2D.Collision.Shapes.b2PolygonShape;
        import Box2D.Common.Math.b2Vec2;
        import Box2D.Dynamics.b2Body;
        import Box2D.Dynamics.b2BodyDef;
        import Box2D.Dynamics.b2DebugDraw;
        import Box2D.Dynamics.b2FixtureDef;
        import Box2D.Dynamics.b2World;
        import Box2D.Dynamics.Controllers.b2BuoyancyController;
        import Box2D.Dynamics.Joints.b2DistanceJoint;
        import Box2D.Dynamics.Joints.b2DistanceJointDef;
        import Box2D.Dynamics.Joints.b2JointDef;
        import Box2D.Dynamics.Joints.b2RevoluteJoint;
        import Box2D.Dynamics.Joints.b2RevoluteJointDef;
        import fl.motion.AnimatorBase;
        import fl.motion.Color;
        import fl.motion.easing.Linear;
        import fl.transitions.easing.Strong;
        import fl.transitions.Fly;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
          import flash.events.MouseEvent;
        import flash.events.TimerEvent;
        import flash.geom.ColorTransform;
        import flash.geom.Point;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.net.URLRequest;
        import flash.text.TextField;
        import flash.text.TextFormat;
        import com.greensock.*;
        import com.greensock.easing.*;
        import flash.utils.Timer;
        /**
        * ...
        * @author
        */

        public class Config
        {
                public static var _world:b2World; //мир
                public static var meters:Number = 40;
                public static var stageApp:Stage;
                public static var bodyGunBarbet:b2Body ;
                public static var bodybarrelGune:b2Body;
                static private var gunSprite:Sprite;
                static private var body:b2Body; //mixer
                static public var spriteMixer:Sprite;
                static private var bodyAngle;
                static private var body2:b2Body;
                public static var counter:Number = 0;
 
                      ...
 
                    public static function createWorld(xGravity:Number = 0, yGravity:Number = 0, doSleep:Boolean = true) {
                        var gravity:b2Vec2 = new b2Vec2(xGravity, yGravity);
                        var sleepingBody:Boolean = doSleep;
                        _world = new b2World(gravity, sleepingBody);
                        return _world;
                        }
 
                        public static function setBg(stage:Stage):Sprite {
                        var sprite:Sprite = new Bg() ;
                        sprite.y = -25;
                        sprite.x = -15;
                        sprite.rotation = 1;
                        return sprite;
                        }
 
 
 
                        public static function createDebugDraw(sprite:Sprite, scale:Number, alpha:Number, lineThickness:Number, flags:Number) {
                        var debugDraw:b2DebugDraw = new b2DebugDraw(); //создаем объект отвечающий за настройки отрисовки debug тел
                        debugDraw.SetSprite(sprite); //устанавливаем спрайт
                        debugDraw.SetDrawScale(scale); //масштаб
                        debugDraw.SetFillAlpha(alpha); //прозрачность
                        debugDraw.SetLineThickness(lineThickness); //толщину линий
                        //debugDraw.SetFlags(flags); //флаги
                        _world.SetDebugDraw(debugDraw); //добавляем в мир
                        _world.DrawDebugData(); //отрисовываем debug тела
                        return debugDraw; //возвращаем ссылку на debugDraw
                        }
 
 
                        public static function createWallStage(thickness:Number = 10,padding:Number=0):void {
                        var body:b2Body;  //тело
                        var bodyDef:b2BodyDef; //геометрические параметры тела
                        var bodyShapePoligon:b2PolygonShape; //шейп прямоугольника
                          var wallThickness:Number = thickness; //толщина стенки
 
                        //left
                        bodyDef = new b2BodyDef(); //создаем b2BodyDef
                        bodyDef.position.Set(wallThickness/meters/2, stageApp.stageHeight/meters/2); //устанавливаем позицию тела на сцене
                        bodyShapePoligon = new b2PolygonShape();
                        bodyShapePoligon.SetAsBox(wallThickness/meters/ 2, stageApp.stageHeight / meters / 2);
                        body = _world.CreateBody(bodyDef); //создаем тело
                        body.CreateFixture2(bodyShapePoligon);
 
                        //right
                        bodyDef = new b2BodyDef(); //создаем b2BodyDef
                        bodyDef.position.Set((stageApp.stageWidth-wallThickness/2)/meters, stageApp.stageHeight/meters/2); //устанавливаем позицию тела на сцене
                        body = _world.CreateBody(bodyDef);//создаем тело
                        body.CreateFixture2(bodyShapePoligon);
 
                        //down
                        bodyDef = new b2BodyDef(); //создаем b2BodyDef
                        bodyDef.position.Set(stageApp.stageWidth/2/meters, (stageApp.stageHeight-wallThickness/2)/meters+padding/meters);
                        bodyShapePoligon = new b2PolygonShape();
                        bodyShapePoligon.SetAsBox(stageApp.stageWidth/meters/ 2, wallThickness / meters / 2); //устанавливаем позицию тела на сцене
                        body = _world.CreateBody(bodyDef); //создаем тело
                        body.CreateFixture2(bodyShapePoligon);
 
                        //up
                        bodyDef = new b2BodyDef(); //создаем b2BodyDef
                        bodyDef.position.Set(stageApp.stageWidth/2/meters, wallThickness/2/meters); //устанавливаем позицию тела на сцене
                        bodyShapePoligon = new b2PolygonShape();
                        bodyShapePoligon.SetAsBox(stageApp.stageWidth/meters/ 2, wallThickness / meters / 2);
                        body = _world.CreateBody(bodyDef); //создаем тело
                        body.CreateFixture2(bodyShapePoligon);
                        }
                          .....

Код AS3:

package  
{
        import Box2D.Dynamics.b2ContactListener;
        import Box2D.Dynamics.b2DebugDraw;
        import Box2D.Dynamics.b2World;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.events.TimerEvent;
        import flash.net.drm.DRMPlaybackTimeWindow;
        import flash.text.TextField;
        import flash.utils.Timer;
 
        import Box2D.Collision.Shapes.b2CircleShape;
        import Box2D.Collision.Shapes.b2MassData;
        import Box2D.Collision.Shapes.b2PolygonShape;
        import Box2D.Common.Math.b2Vec2;
        import Box2D.Dynamics.b2Body;
        import Box2D.Dynamics.b2BodyDef;
        import Box2D.Dynamics.b2DebugDraw;
        import Box2D.Dynamics.b2FixtureDef;
        import Box2D.Dynamics.b2World;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.events.Event;
    import flash.events.MouseEvent;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.net.URLRequest;
 
        import com.greensock.*;
        import com.greensock.easing.*;
        /**
        * ...
        * @author
        */

 
        public class lvl5 extends Sprite
        {
                var _world:b2World ;
                var debugSprite:Sprite = new Sprite() ;
                var BGsprite:Sprite = new Bg() ;
                var globalSmoke:Array = new Array() ;
                private var velocityIterations:int = 10;
                private var positionIterations:int = 10;
                private var timeStep:Number = 1 / 24;
                private var objectForRotation:String ;
                private var next:Sprite;
                private var menu:Sprite;
                private var tryAgain:Sprite;
                private var shoots:TextField;
                private var countShoots:Number=0;
                private var time:TextField;
                private var frame:Number=0;
                private var curentTime:Number=0;
                private var finalShoot:TextField;
                private var finalTime:TextField;
                private var Wn:Sprite;
                public var timeerok:Timer = new Timer(3000, 1) ;
                private var pauseButton:TextField ;
                private var restartButton:TextField ;
                private var EndGame:Boolean = false;
 
 
 
                public function lvl5()
                {       
                        addChild(Config.setBg(this.stage)) ;                       
                        addChild(debugSprite);
                        _world = Config.createWorld(0.0, 10, true);
                          Config.stageApp = stage;
                        Config.meters = 30;
                                Config.createWallStage(10);
                        Config.setFrutes(this.stage);
                        Config.addGunsBody(20,390);
                        Config.createDebugDraw(debugSprite, 30.0, 0.4, 1, b2DebugDraw.e_shapeBit |                                b2DebugDraw.e_centerOfMassBit);
                        Config.setMixer(460,320,0,4,true);
                        Config.addJumperForLvl5();
                        Config.addMouseEv();
                        addEventListener(Event.ENTER_FRAME, update) ;
                        addEventListener(Event.ENTER_FRAME, shootGune);
                        addEventListener(Event.ENTER_FRAME , updateFrutesSprites) ;
                        addEventListener(Event.ENTER_FRAME , updateSmoke);
                        _world.SetContactListener(new b2ContactListenerList() ) ;
 
                        shoots = Config.creatTextField(70, 20, false, true, true,false,400,10,15);
                        addChild(shoots) ;
 
                        time = Config.creatTextField(50, 30, false, true, true, false,490,10,15);
                        addChild(time) ;       
 
                        pauseButton = Config.creatActiveButton(20, 5, "pause");
                        restartButton = Config.creatActiveButton(pauseButton.x + 60, 5, "restart");
                }
....

Помогите пожалуйста решить эту проблему, уже 2 недели бьюсь как рыба об лед,ничего не выходит исправить, гуглил, не помогло

ZackMercury 21.04.2014 23:35

Код AS3:

package  
{
        import Box2D.Dynamics.b2ContactListener;
        import Box2D.Dynamics.b2DebugDraw;
        import Box2D.Dynamics.b2World;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.events.TimerEvent;
        import flash.net.drm.DRMPlaybackTimeWindow;
        import flash.text.TextField;
        import flash.utils.Timer;
 
        import Box2D.Collision.Shapes.b2CircleShape;
        import Box2D.Collision.Shapes.b2MassData;
        import Box2D.Collision.Shapes.b2PolygonShape;
        import Box2D.Common.Math.b2Vec2;
        import Box2D.Dynamics.b2Body;
        import Box2D.Dynamics.b2BodyDef;
        import Box2D.Dynamics.b2DebugDraw;
        import Box2D.Dynamics.b2FixtureDef;
        import Box2D.Dynamics.b2World;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.events.Event;
    import flash.events.MouseEvent;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.net.URLRequest;
 
        import com.greensock.*;
        import com.greensock.easing.*;
        /**
        * ...
        * @author
        */

 
        public class lvl5 extends Sprite
        {
                var _world:b2World ;
                var debugSprite:Sprite = new Sprite() ;
                var BGsprite:Sprite = new Bg() ;
                var globalSmoke:Array = new Array() ;
                private var velocityIterations:int = 10;
                private var positionIterations:int = 10;
                private var timeStep:Number = 1 / 24;
                private var objectForRotation:String ;
                private var next:Sprite;
                private var menu:Sprite;
                private var tryAgain:Sprite;
                private var shoots:TextField;
                private var countShoots:Number=0;
                private var time:TextField;
                private var frame:Number=0;
                private var curentTime:Number=0;
                private var finalShoot:TextField;
                private var finalTime:TextField;
                private var Wn:Sprite;
                public var timeerok:Timer = new Timer(3000, 1) ;
                private var pauseButton:TextField ;
                private var restartButton:TextField ;
                private var EndGame:Boolean = false;
 
 
                public function lvl5()
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
                public function init(e:Event):void
                {       
                        addChild(Config.setBg(this.stage)) ;                       
                        addChild(debugSprite);
                        _world = Config.createWorld(0.0, 10, true);
                          Config.stageApp = stage;
                        Config.meters = 30;
                                Config.createWallStage(10);
                        Config.setFrutes(this.stage);
                        Config.addGunsBody(20,390);
                        Config.createDebugDraw(debugSprite, 30.0, 0.4, 1, b2DebugDraw.e_shapeBit |                                b2DebugDraw.e_centerOfMassBit);
                        Config.setMixer(460,320,0,4,true);
                        Config.addJumperForLvl5();
                        Config.addMouseEv();
                        addEventListener(Event.ENTER_FRAME, update) ;
                        addEventListener(Event.ENTER_FRAME, shootGune);
                        addEventListener(Event.ENTER_FRAME , updateFrutesSprites) ;
                        addEventListener(Event.ENTER_FRAME , updateSmoke);
                        _world.SetContactListener(new b2ContactListenerList() ) ;
 
                        shoots = Config.creatTextField(70, 20, false, true, true,false,400,10,15);
                        addChild(shoots) ;
 
                        time = Config.creatTextField(50, 30, false, true, true, false,490,10,15);
                        addChild(time) ;       
 
                        pauseButton = Config.creatActiveButton(20, 5, "pause");
                        restartButton = Config.creatActiveButton(pauseButton.x + 60, 5, "restart");
                }
....


iters 22.04.2014 00:18

не помогло

ZackMercury 22.04.2014 02:57

Естественно, у вас же ошибка говорит про lvl16, а не про lvl5.

iters 22.04.2014 14:40

не имеет значения, у всех файлов выдает одну и ту же ошибку, конечно же будет написаны разные файлы

ZackMercury 22.04.2014 15:13

Ну тогда протрейсите всё, что вы делаете в методе createWallStage.
И найдите, почему и что там == null.

caseyryan 22.04.2014 15:21

мм, а разве брейкпоинт не срабатывает при выбросе ошибки? В чем код пишется вообще?

ZackMercury 22.04.2014 15:22

Цитата:

Сообщение от caseyryan (Сообщение 1164242)
мм, а разве брейкпоинт не срабатывает при выбросе ошибки? В чем код пишется вообще?

Как раз трейсом и можно найти место, где возникает ошибка. Трейс работает до ошибки.

iters 22.04.2014 15:47

код пишу во flash develop , собираю файлы в adobe flash cs5.5, у меня не так много опыта , можете объяснить что такое брейкпоинт?

PainKiller 22.04.2014 17:33

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

iters 23.04.2014 01:03

все!!!!. оказалось,что stage в классах был null , через функцию конструктор передал this.stage и все получилось

caseyryan 23.04.2014 07:46

Это не правильное решение. Надо подписываться на Event.ADDED_TO_STAGE, и по этому событию уже обращаться к stage. Ваш вариант подойдет для не дисплей классов, которые в принципе не добавляются в дисплей лист. Но и то тут можно поставить под вопрос необходимость им обращаться к stage


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

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