Я получил сообщение об ошибке № 1009 о невозможности доступа к свойству или методу пустой ссылки на объект. Что теперь?

Так что я получил эту ошибку при попытке запустить мою игру. Это простая маленькая игра, которая вращается вокруг того, чтобы собирать канистры с орбитой, пытаясь избежать обращения с врагами. Поэтому я нажал Ctrl+Shft+Enter и обнаружил, что проблема была в строке 26 (если (this.y +...) в моем классе кораблей.

package 
{

    import flash.display.Sprite;
    import flash.events.Event;


    public class Ship extends Sprite
    {

        public function Ship(_x:int,_y:int)
        {
        this.x = _x;
        this.y = _y;
        //adds event listener that allows the player to move
        addEventListener(Event.ENTER_FRAME, player_move);
    }

    public function player_move(e:Event)
    {
        //check if at left or right side of stage
        if (this.y - this.height / 2 <= 0)
        {
            this.y = 50;
        }
        if (this.y + this.height / 2 >= stage.height - this.height)
        {
            this.y = 370;
        }
        if (this.x - this.width / 2 <= 0)
        {
            this.x = 50;
        }
        if (this.x + this.width / 2 >= stage.width - this.width)
        {
            this.x = 500;
        }


    }

    public function left():void
    {
        //the speed in which the player will move left
        this.x -=  10;
    }
    public function right():void
    {
        //the speed in which the player will move right
        this.x +=  10;
    }
    public function up():void
    {
        //the speed in which the player will move right
        this.y -=  10;
    }
    public function down():void
    {
        //the speed in which the player will move right
        this.y +=  10;
    }
  }
}

Что мне теперь делать? Как это исправить? Я нигде не могу найти ответ. Я знаю, что это как-то связано с моим Главным классом, так как в нем я заявлял, что если Игрок его враг, его корабль возвращается к его первоначальным командам.

Любая помощь будет принята с благодарностью. Благодарю.

1 ответ

Ваш нулевой объект stage ссылка. Каждый объект DisplayObject имеет ссылку на сцену, однако это значение равно нулю, пока объект не окажется на сцене.

Этап является основным контейнером вашего приложения. Все, что визуально в вашем приложении, будет каким-то образом на сцене. Ваш основной класс документов будет на сцене, все объекты временной шкалы и т. Д.

Ваш объект считается находящимся на сцене, даже если он был добавлен в другой контейнер, если этот контейнер каким-то образом находится на сцене. Таким образом, если выразить это в самых основных терминах, если объект находится где-то, где пользователь должен его видеть, этап не будет нулевым.

Чтобы обойти это, вы должны будете добавить свой ENTER_FRAME слушатель событий после того, как ваш объект был добавлен на сцену. К счастью, вы можете прослушать событие, которое запускается, когда это происходит.

В конструкторе:

addEventListener(Event.ADDED_TO_STAGE, init);

Затем добавьте ваш обработчик:

private function init(evt:Event){
    addEventListener(Event.ENTER_FRAME, player_move);
}

Помните, stage будет нулевым, пока объект не будет добавлен на сцену, которая является событием, которое мы сейчас слушаем. Затем просто добавьте свой корабль в основную игру или в любой контейнер, в котором он находится, container.addChild(ship)и если этот контейнер является частью сцены, вы должны быть в порядке.

Другие вопросы по тегам