Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.06.2013, 00:00
DmMatveev вне форума Посмотреть профиль Отправить личное сообщение для DmMatveev Найти все сообщения от DmMatveev
  № 1  
Ответить с цитированием
DmMatveev

Регистрация: Nov 2012
Сообщений: 5
По умолчанию Наследования

Здравствуйте, уважаемые профессионалы. Прошу Вас помощи.
Программировать стал не давно, так что сильно ругайте за любые не до четы.

Сначала объясню принцип моей логики в составление структуры кода.
Пишу во Flash Builder 4.6.

Есть главный класс Main.
Код AS3:
package
{	
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import game.Core;
	import game.Snake;
	import view.View;
 
	[SWF(width="500", height="500")]
	public class Main extends Sprite
	{
		public static var gameStage:Object;
 
		public function Main()
		{
			gameStage = stage;
 
			var snake:Snake = new Snake();
		}
 
 
	}
}
В этом классе я инициализирую класс Snake(Змея. Делаю игру "змейка"). И записываю ссылку на stage.

Класс Snake
Код AS3:
package game
{
	public class Snake extends Core
	{
		public function Snake()
		{
			init();
			createSnake();
		} 
 
		private function createBody():void
		{
			/**
			 * Функция createBody 
			 * Функция служит для увеличение длины змеи.
			 */		
			var obj:Snake_Body = new Snake_Body();
			var dataObj:Object = system[1][(system[1].length)-1];
 
			_view.draw(obj, dataObj.x, (dataObj.y) + system[3][0]);
 
			system[1].push(obj);
			system[0] += 1;
		}
 
		private function createSnake():void
		{
			/**
			 * Функция CreateSnake
			 * Функция служит для создания змеи.
			 */		
			var obj:Snake_Head = new Snake_Head();
 
			_view.draw(obj, system[2][0], system[2][1]);
 
			system[1].push(obj);
			system[0] += 1;
 
			createBody();
			createBody();
		}
	}
}
В конструкторе я запускаю функцию init(), которая находится в классе Core. И запуская функция для создание змейки. Здесь проблем нет.
Код AS3:
package game
{
	import flash.events.KeyboardEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	import move.*;
 
	import view.View;
 
	public class Core
	{
		protected var _view:View;
		protected var system:Array;
		private var moving:IMove;
		private var _top:Top;
		private var timeMove:Timer;
 
		public function Core()
		{
		}
 
		public function init():void
		{
			_view = new View();
			system = new Array();
			_top = new Top();
			timeMove = new Timer(1000);
 
                        moving = _top;
 
			system[0] = 0;//Длина змейки
			system[1] = [];//Части змеи
			system[2] = [400, 250];//Координаты змейки (x, y)
			system[3] = [22];//Разрыв по x, Разрыв по y
			system[4] = [1, 1, 1, 1];//Left, Top, Right, Down
 
			Main.gameStage.addEventListener(KeyboardEvent.KEY_DOWN, changeMove);
			timeMove.addEventListener(TimerEvent.TIMER, timeMoveHandler);
 
			timeMove.start();
		}
 
		private function timeMoveHandler(event:TimerEvent):void
		{
			moving.move();
		}
 
		private function changeMove(e:KeyboardEvent):void
		{
			/**
			* Функция changeMovie 
			* Функция служит для изменения направления
				* Клавиша влево - 37; Клавиша вверх - 38; Клавиша вправо - 39; Клавиша вниз - 40;
			*/
			switch(e.keyCode)
			{
				case 37:
					//moving = _left;
				break;
				case 38:
					//moving = _top;
				break;
				case 39:
					//moving = _right;
				break;
				case 40:
					//moving = _down;
				break;
			}
		}
	}
}
Здесь я инициализирую класс View.

Код AS3:
package view
{
	public class View
	{
		private var stage:Object;
 
		public function View()
		{
			stage = Main.gameStage;
		}
 
		public function draw(obj:Object, x:Number = 0, y:Number = 0, frame:int = 1):void
		{
			obj.x = x;
			obj.y = y;
			obj.gotoAndStop(frame);
 
			stage.addChild(obj);
		}
	}
}
И инициализирую класс движения Top

Код AS3:
package move
{
	import game.Core;
 
	public class Top extends Core implements IMove
	{
		public function Top()
		{
		}
 
		public function move():void
		{
			trace(system[0]);
		}
 
		public function changeFlag():void
		{
			system[4][3] = 0; 
			system[4][1] = 0;
		}
	}
}
Этот класс расширяет интерфейс, вот код.
Код AS3:
package move
{
	public interface IMove
	{
		function move():void;
		function changeFlag():void;
	}
}
Теперь о ошибках, в классе Snake, я могу обратиться к свойствам Core, а в классе Top, я не могу получать эти свойства, то есть, где код "trace(system[0])". Возникает ошибка "Не удается вызвать свойство или метод со ссылкой на объект "null"". Надеюсь Вы мне поможете. Заранее спасибо.

Вот иерархия:


Вот ссылка на исходники:
http://********/d/pC9vfIvu5xnIC

Заранее спасибо!

Добавлено через 11 часов 26 минут
Помогите

Добавлено через 11 часов 27 минут
Помогите

Старый 19.06.2013, 12:57
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 2  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Не заметил где у вас в Top инициализируется массив system. Ф-ция init() нигде не вызывается. В Snake она вызывается в конструкторе, и этот массив заполняется значениями, а в Top нет.
Так что он остаётся null, а обращение system[0] выдаёт ошибку.
__________________
Oomph

Старый 19.06.2013, 13:14
DmMatveev вне форума Посмотреть профиль Отправить личное сообщение для DmMatveev Найти все сообщения от DmMatveev
  № 3  
Ответить с цитированием
DmMatveev

Регистрация: Nov 2012
Сообщений: 5
Спасибо) А как на счет кода? Можно как-нибудь сделать полегче или лучше?

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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