Как исправить ошибку #1009 в добавленном в Main классе?

У меня есть класс ChestScene, представляющий сцену/MovieClip в файле .fla, над которым я работаю. У меня было множество проблем, которые, похоже, коренились в фундаментальном непонимании того, как правильно использовать объекты, к которым прикреплен код. Насколько я понимаю, добавление объекта на сцену автоматически создает его экземпляр, поэтому сейчас все, что я пытаюсь сделать, это создать экземпляр и добавить его на сцену ChestScene() в конструкторе моего метода Main. Я думал, что это будет так просто:

    public class Main extends MovieClip {

    var chest:Chest = new Chest();

    public function Main() {
        stage.addChild(chest);
    }

Но я получаю эту ошибку:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Chest()/startScene()
    at Chest()
    at Main()

Итак, мой первый вопрос: почему сундук нулевой? Объект существует в моем fla. Если я добавлю его на сцену, перетащив из библиотеки, класс будет работать как задумано. addChild, кажется, работает с другими объектами, которые я использую таким же образом, поэтому я не понимаю, почему я не могу использовать его для этого объекта.

Как использовать метод Main для создания экземпляра объекта и доступа/изменения свойств указанного объекта относительно сцены? И как я могу сделать то же самое для объектов, вложенных в мой первоначальный объект?

***** Редактировать после ответа

Спасибо за ваш ответ и за то, что научили меня читать отладочное сообщение. startScreen() действительно был виновником, и проблема заключалась в следующем:

stage.addEventListener(Event.ENTER_FRAME, gameLoop)

Удаление сцены и добавление слушателя к объекту исправили эту ошибку, так что слава! Но я все еще в замешательстве; почему попытка добавить слушателя на сцену вызывает нулевую ошибку? Я не понимаю, почему этап будет нулевым в этот момент. Кроме того, удаление "оленя". из addEventListener привел к тому, что размер кадра, содержащего сцену, был намного меньше, что обрезало большую часть моего изображения. Почему прослушиватель событий влияет на ширину и высоту сцены? Вот почему я также задавал вопросы о том, как правильно расположить элементы относительно ширины и высоты сцены, потому что я знаю, что это как-то связано с ошибками.


person freethought    schedule 14.05.2016    source источник
comment
Я понимаю, что это большой вопрос на самом деле слишком большой. Давайте разберемся с #1009 в этом вопросе. Задайте вопрос, связанный с масштабированием, в отдельном вопросе.   -  person null    schedule 14.05.2016
comment
Вы неправильно читаете ошибку. Он не говорит, что сундук равен нулю, он говорит, что что-то внутри метода startScene равно нулю, что, как я предполагаю, связано с тем, что вы ссылаетесь на «стадию», которая в этот момент равна нулю.   -  person BotMaster    schedule 14.05.2016
comment
Как я уже сказал, пожалуйста, создайте отдельный новый вопрос о ваших проблемах с масштабированием и изменением размера. Старайтесь, чтобы вопросы были небольшими и касались одной проблемы. Проблема этого вопроса заключалась в том, почему вы получили сообщение об ошибке. Не стесняйтесь задавать больше вопросов. Это поощряется на этом сайте. Этот сайт не предназначен для решения всех ваших проблем в одном огромном беспорядке.   -  person null    schedule 15.05.2016


Ответы (1)


почему сундук нулевой?

Chest не null. Это конструктор класса и не может быть null.

Обратите внимание на трассировку стека, прикрепленную к ошибке (строки с «at…» под сообщением). Он сообщает вам, где произошла ошибка. Чтение его снизу вверх дает вам порядок выполнения вызовов методов.

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Chest()/startScene()
    at Chest()
    at Main()

Main() позвонил Chest(), Chest() позвонил startScene() и БУМ! здесь произошла ошибка.

Чтобы отладить эту ошибку, посмотрите startScene() . Что-то там есть null.

Глядя на ваш текущий код:

stage.addChild(chest);

Я предполагаю, что вы также пытаетесь добавить что-то к stage в Chest(). Но stage недоступен ( null) в Chest(). Как правило, добавлять элементы в stage как можно прочитать в документации addChild()

Просто добавьте к объекту, а не stage :

addChild(chest);
person null    schedule 14.05.2016
comment
@pocketrockets, пожалуйста, не добавляйте код в комментарии, вместо этого отредактируйте свой вопрос, включив в него дополнительную информацию. - person null; 15.05.2016