2013-11-09 2 views
-1

Я изучаю, как создавать классы MovieClip. Все, что я пытаюсь сделать, это дать MovieClip возможность перемещаться с помощью клавиш со стрелками влево и вправо, но это не работает.Связь между классом документа и классом MovieClip: ошибка 1009

Вот мой код для моего класса Document Main:

package { 

    import flash.display.MovieClip; 

    public class Main extends MovieClip{ 

     var blueBall:Ball = new Ball; //This is line 7 

      public function Main() 
     { 
      addChild(blueBall) 
     } 

    } 

} 

Мой код для моего класса Болл:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 

    public class Ball extends MovieClip 
    { 
     public function Ball() 
     { 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); //This is Line 11 
     } 

     function keyPressed(evt:KeyboardEvent):void 
     { 
      switch (evt.keyCode) 
     { 
      case Keyboard.RIGHT : 
       this.x += 10; 
       break; 
      case Keyboard.LEFT : 
       this.x -= 10; 
       break; 
     } 
    } 

} 

}

Когда я запускаю это в отладке, я получить эту ошибку:

ТипError: Ошибка # 1009: Не удается получить доступ к свойству или методу нулевого объекта ct ссылка. at Ball() [C: \ Users \ Joel \ Desktop \ Flash \ Projects \ DropClassTest \ Ball.as: 11] в Main() [C: \ Users \ Joel \ Desktop \ Flash \ Projects \ DropClassTest \ Main. as: 7]

Теперь, если я просто оставил свой основной класс документа пустым и просто перетащил blueBall Movieclip из библиотеки, он работает так, как я этого хочу, но как только я попытаюсь использовать документ класс, чтобы сделать это, он не работает.

Излишне говорить, что я совсем потерян, даже думал, что отладчик говорит мне, какие строки ошибочны.

Любые идеи?

ответ

0

Проблема в том, что вы пытаетесь получить доступ к сцене изнутри класса Ball до того, как мяч будет добавлен на сцену. Перед добавлением объекта на сцену он не имеет прямого доступа к сцене.

Вариант 1: Вы можете передать этап от основного класса до конструктора Ball.

Добавьте это к классу Шаровые импорта:

import flash.display.Stage; 

Добавить параметр этап в классе мячем конструктор:

public function Ball(stage:Stage):void { 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); 
} 

И пройти этап к экземпляру Болл (в Main)

var blueBall:Ball = new Ball(stage); 

Вариант 2: Вы можете слушать п или событие ADDED_TO_STAGE внутри класса шарика и добавьте Key_Down слушателя раз происходит ADDED_TO_STAGE:

Внутри импорта класса Бал класса Event:

import flash.events.Event; 

Replace ваш конструктор с этим:

public function Ball():void { 
    addEventListener(Event.ADDED_TO_STAGE, addedToStage); 
} 

Затем добавьте слушателя KEY_DOWN внутри слушателя ADDED_TO_STAGE:

function addedToStage(evt:Event):void { 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); 
} 
Смежные вопросы