Показать сообщение отдельно
Старый 19.12.2014, 16:12
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию нулевая ссылка на объект

помогите, никак не могу найти причину проблемы, пишет что
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at package_cl::gl_ship_cl/fn_stage_x_y_ship()
at package_cl::gl_ship_cl/fn_control_ship()
если из класс main удалить, то всё control_bullet = new Control_bullet_cl (gl_ship) нормально, а если оставить, то кораблик перестаёт двигаться и лезет эта ошибка
Код AS3:
package {
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.events.Event;
	import flash.display.MovieClip;
	import package_cl.str_daub_cl;
	import package_cl.gl_ship_cl;
	import package_cl.bullet_cl;
	import package_cl.vector_bullet_cl;
	import package_cl.Control_bullet_cl;
 
	public class main extends MovieClip {
		public var str_daub: str_daub_cl = new str_daub_cl();
		private var gl_ship: gl_ship_cl;
		public var bullet: bullet_cl = new bullet_cl();
		public var vector_bullet: vector_bullet_cl = new vector_bullet_cl();
		private var control_bullet: Control_bullet_cl;
 
 
		public function main() {
			this.addChild(str_daub);
			str_daub.str_daub_Array[3].addEventListener(MouseEvent.CLICK, fn_click_btn);
		}
		public function fn_click_btn(e: MouseEvent): void {
			str_daub.str_daub_Array[3].removeEventListener(MouseEvent.CLICK, fn_click_btn);
			this.removeChild(str_daub);
			gl_ship = new gl_ship_cl();			
			this.addChild(gl_ship);
			control_bullet = new Control_bullet_cl (gl_ship);  //вот от этой строки проблемы 
			stage.focus = stage;
		}
	}
}
Код AS3:
package package_cl {
	import flash.events.KeyboardEvent;
	import package_cl.gl_ship_cl;
	import package_cl.vector_bullet_cl;
	import flash.display.Sprite;
 
	public class Control_bullet_cl extends Sprite{
		private var vr_bullet: vector_bullet_cl = new vector_bullet_cl();
		private var gl_ship: gl_ship_cl = new gl_ship_cl();
 
		public function Control_bullet_cl(gl_ship) {
			// constructor code
			stage.addEventListener(KeyboardEvent.KEY_DOWN, fn_fire_down);
			stage.addEventListener(KeyboardEvent.KEY_UP, fn_fire_up);
		}
		private function fn_fire_down(): void {
 
		}
		private function fn_fire_up(): void {
 
		}
 
	}
 
}
Код AS3:
package package_cl {
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import flash.events.Event;
	import flash.geom.Point;
	import package_cl.global_variable_cl;
	import package_cl.vector_bullet_cl;
	import package_cl.bullet_cl;
 
	public class gl_ship_cl extends gl_ship_mc {
 
		private var upPressed: Boolean = false;
		private var leftPressed: Boolean = false;
		private var rightPressed: Boolean = false;
		private var gl_variable: global_variable_cl;
		private var ver_bullet: vector_bullet_cl;
 
		///////////////////////////////
		public function gl_ship_cl() {
			gl_variable = new global_variable_cl();
			ver_bullet = new vector_bullet_cl();
			x = 800;
			y = 525;
			this.addEventListener(Event.ENTER_FRAME, fn_control_ship);
                private function fn_control_ship(e: Event): void {
			if (rightPressed) {
				rotation += gl_variable.rotation_ship;
			}
			if (leftPressed) {
				rotation -= gl_variable.rotation_ship;
			}
			if (upPressed) {
				if (gl_variable.jump_ship <= gl_variable.jump_ship_max) {
					gl_variable.jump_ship += gl_variable.factor_jump_ship;
				}
				vector_Vx_ship = gl_variable.factor_speed_ship * gl_variable.jump_ship * Math.cos(rotation * Math.PI / 180);
				vector_Vy_ship = gl_variable.factor_speed_ship * gl_variable.jump_ship * Math.sin(rotation * Math.PI / 180);
				x -= vector_Vx_ship;
				y -= vector_Vy_ship;
			} else {
				if (gl_variable.jump_ship >= 0.2) {
					vector_Vx_ship = vector_Vx_ship * gl_variable.braking_ship;
					vector_Vy_ship = vector_Vy_ship * gl_variable.braking_ship;
					x -= vector_Vx_ship;
					y -= vector_Vy_ship;
					gl_variable.jump_ship -= 0.15;
				}
			}
			fn_stage_x_y_ship();
		}
		private function fn_stage_x_y_ship(): void {
			if (x > stage.stageWidth - 30) {
				x = 30;
			}
			if (x < 30) {
				x = stage.stageWidth - 30;
			}
			if (y > stage.stageHeight - 30) {
				y = 180;
			}
			if (y < 180) {
				y = stage.stageHeight - 30;
			}
		}
        }
}
Добавлено через 1 минуту
тут немного больше переменных, код не полный, боюсь если начну сильнее править, допущу ошибку