Позвольте мне спросить вас об этом. Когда я использую 'for (var i: int = 0; i <stage.numChildren; i ++) {trace (i + "." + Stage.getChildAt (i) .name); } 'Я получаю результат трассировки "O. root1". Должен ли я получать только след root, или я должен видеть весь порядок наложения, который я вижу, когда делаю это в классе документа?

изучения этого превосходного метода доступа к объекту, помещенному на сцену во Flash CS5, в классе, отличном от класса документа (найденов этой теме), Я столкнулся с камнем преткновения. Я использую

this.stage.getChildAt(0).greenLight1.visible=false;

повернуть символ с именем экземпляра greenLight1 невидимым при доступе к greenLight1 (имя экземпляра указано в моем .fla для растрового изображения). Это прекрасно работает там, где я использовал его, который находится в подфункции нескольких разных классов. Проблема, с которой я сталкиваюсь, заключается в том, что вы не можете использовать это в конструкторе этих недокументированных классов или в любой функции, вызываемой непосредственно конструктором. Если я пытаюсь это сделать, я получаю следующее сообщение «Ошибка № 1009: не удается получить доступ к свойству или методу пустой ссылки на объект».

Так что я понимаю, что я не получаю доступ к этому правильно и начинаю играть с фразой. Когда я переключаю его на

this.getChildAt(0).greenLight1.visible=false;

Я получаю другую ошибку «1119: доступ к неопределенному свойству greenLight1 возможно через ссылку со статическим типом flash.display: DisplayObject». Так что я явно что-то здесь упускаю.

Теперь я попробовал другую тактику, которую я нашел вэта тема который я также упомянул в приведенной выше ссылке на тему, которую я установил. И благодаря комментарию Аллана в моей другой ветке, я фактически заставил этот метод работать. Однако, когда я пытаюсь поместить эту ссылку в класс конструктора любого другого класса, не относящегося к документу, я фактически получаю ту же ошибку «Ошибка № 1009: не удается получить доступ к свойству или методу пустой ссылки на объект». Но это прекрасно работает, если я использую его в подфункции. Похоже, такая же проблема.

Мой проект состоит из файла Game.fla, который содержит различные растровые символы и несколько кнопок, которые я поместил в свою библиотеку и перетащил на сцену (и я дал им все уникальные имена экземпляров). Я настроил свой класс документов Game.as, и внутри него я могу получить доступ ко всем этим элементам, просто используя их имя экземпляра. Теперь в моем подклассе под названием Player.as я настроил функцию lightsOut (), которая выключает свет, используя переключатель / чехол. Именно там я использую "this.stage.getChildAt (0) .greenLight1.visible = false;" и это работает отлично. Здесь я также установил другую тактику, о которой упоминал выше, и попробовал «Game.GL1.visible = false;» и это отлично сработало. Но затем в моем подклассе под названием Controller.as, где у меня есть все мои обработчики мыши и клавиатуры, я попытался настроить прослушиватель событий для одной из моих кнопок этапа. Поэтому я поместил его в функцию конструктора Controller, где все мои другие прослушиватели событий настроены и уже работают (они используют «stage.addeventlistener ...»), и именно здесь я начал видеть ошибки. Так что я решил попытаться отключить greenLight1, так как я уже знал, что код работает, и пробовал только строку «this.stage.getChildAt ....» и только строку «Game.GL1 ...» смотреть их вызывают ошибки, которые я упоминал выше. Поэтому я вернулся к своему классу Player.as и попробовал их в классе конструктора Player, и снова получил те же ошибки, даже если я использую ту же строку ниже в классе Player.as. Обратите внимание, что я прошел стадию и для Controller, и для Player и прекрасно использовал ее в обоих случаях. Я также попытался настроить вызов другой функции в конструкторе с именем Init (); и получил ту же ошибку при попытке получить доступ к greenLight1, но он все еще работал в lightsOut (). Также не уверен, имеет ли это значение, но все классы также расширяют MovieClip. Я не знаю, поможет ли это, но вот начало класса Player вместе с функцией lightsOut. Я удалил остальную часть кода, поскольку он не имеет отношения:

package {
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.DisplayObject;

public class Player extends MovieClip {
    private var _stage:Object;
    private var _lights:uint;

    public function Player(stage:Object):void {
        this._stage = stage;
        this._stage.getChildAt(0).greenLight1.visible=false; //errors
        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }
    private function lightsOut():void {
        switch(_lights) {
            case 1:
            this._stage.getChildAt(0).greenLight1.visible=false;//works
            break;
            case 2:
            this._stage.getChildAt(0).greenLight2.visible=false;//works
            break;
            case 3:
            this._stage.getChildAt(1).greenLight3.visible=false;//works
            break;
        }
    }

Что мне здесь не хватает?

РЕДАКТИРОВАТЬ: ОК, вот класс документа (по крайней мере, что важно для контроллера и игрока):

public class Game extends MovieClip {
    private var _player:Player = new Player(stage);
    private var _controller:Controller = new Controller(_player, stage);

    public function Game():void {
        addChild(_player);
        addEventListener(Event.ADDED_TO_STAGE, added);

Вот важная часть класса Controller, и я добавил комментарий к тому, что терпит неудачу (реальная причина, по которой я начал этот пост в первую очередь):

public class Controller extends MovieClip {
private var _stage:Stage;
private var _model:Object;

public function Controller(model:Object, stage:Stage):void {
    this._model = model;
    this._stage = stage;

    _stage.addEventListener(KeyboardEvent.KEY_DOWN, processKeyDown);
    _stage.addEventListener(KeyboardEvent.KEY_UP, processKeyUp);
    _stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    this._stage.getChildAt(0).fireButton.addEventListener(MouseEvent.CLICK, onClick); //this is what isn't working
    this._stage.getChildAt(1).greenLight1.visible=false; //added this for testing

Эту последнюю строку я добавил только для того, чтобы увидеть, смогу ли я сделать greenLight1 невидимым, как я могу, когда я вызываю его в функции lightsOut (), которую я отметил в Player.as. Но это НЕ работает, когда размещено здесь в конструкторе. ПОМОГИТЕ!!!! лол

Ответы на вопрос(3)

Ваш ответ на вопрос