| DmMatveev |
19.06.2013 00:00 |
Наследования
Здравствуйте, уважаемые профессионалы. Прошу Вас помощи.
Программировать стал не давно, так что сильно ругайте за любые не до четы.
Сначала объясню принцип моей логики в составление структуры кода.
Пишу во 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://imglink.ru/pictures/18-06-13/...f1e8fd99d5.jpg
Вот ссылка на исходники:
http://********/d/pC9vfIvu5xnIC
Заранее спасибо!
Добавлено через 11 часов 26 минут
Помогите:(
Добавлено через 11 часов 27 минут
Помогите:(
|