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 недели бьюсь как рыба об лед,ничего не выходит исправить, гуглил, не помогло
|