|
|
|||||
Регистрация: Nov 2012
Сообщений: 5
|
Наследования
Здравствуйте, уважаемые профессионалы. Прошу Вас помощи.
Программировать стал не давно, так что сильно ругайте за любые не до четы. Сначала объясню принцип моей логики в составление структуры кода. Пишу во Flash Builder 4.6. Есть главный класс Main. 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 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(); } } } 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; } } } } 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); } } } 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; } } } package move { public interface IMove { function move():void; function changeFlag():void; } } Вот иерархия: Вот ссылка на исходники: http://********/d/pC9vfIvu5xnIC Заранее спасибо! Добавлено через 11 часов 26 минут Помогите Добавлено через 11 часов 27 минут Помогите |
|
|||||
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Не заметил где у вас в Top инициализируется массив system. Ф-ция init() нигде не вызывается. В Snake она вызывается в конструкторе, и этот массив заполняется значениями, а в Top нет.
Так что он остаётся null, а обращение system[0] выдаёт ошибку.
__________________
Oomph |
|
|||||
Регистрация: Nov 2012
Сообщений: 5
|
Спасибо) А как на счет кода? Можно как-нибудь сделать полегче или лучше?
|
Часовой пояс GMT +4, время: 18:10. |
|
« Предыдущая тема | Следующая тема » |
|
|