@Flash CS5 faz referência a um objeto de exibição no construtor de uma classe não documentada

Após aprender esse excelente método de acessar um objeto colocado no palco no Flash CS5 em uma classe que não seja a classe de documento (encontrada neste tópico), Encontrei um ponto de tropeço. Estou usand

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

para tornar um símbolo com o nome da instância greenLight1 invisível ao acessar greenLight1 (o nome da instância especificado em meu .fla para o bitmap). Isso funciona perfeitamente onde eu estava usando, que está em uma sub-função de algumas classes diferentes. O problema que encontro é que você não pode usar isso no construtor dessas classes não documentadas ou em qualquer função chamada diretamente pelo construtor. Se eu tentar fazer isso, obtenho o seguinte "Erro # 1009: Não é possível acessar uma propriedade ou método de uma referência de objeto nulo."

Então, acho que não estou acessando isso corretamente e começo a brincar com a frase. Quando eu mudo para

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

Eu recebo um erro diferente "1119: Acesso à propriedade possivelmente indefinida greenLight1 por meio de uma referência com o tipo estático flash.display: DisplayObject." Então, obviamente, estou perdendo algo aqui.

Agora, tentei uma tática diferente que encontrei em esta discussão que eu também mencionei no link do tópico acima que eu configurei. E graças ao comentário de Allan no meu outro tópico, eu realmente consegui esse método funcionando. No entanto, quando tento colocar essa referência na classe construtora de qualquer outra classe que não seja de documento, recebo o mesmo "Erro # 1009: Não é possível acessar uma propriedade ou método de uma referência de objeto nulo". Mas funciona muito bem se eu usá-lo em uma sub-função. Parece o mesmo problema.

@My project consiste em um arquivo Game.fla que contém vários símbolos de bitmap e vários botões que coloquei na minha Biblioteca e arrastei para o palco (e dei a eles todos os nomes de instância exclusivos). Configurei minha classe de documento Game.as e, dentro dela, posso acessar todos esses itens sem falhar, simplesmente usando o nome da instância. Agora, na minha subclasse chamada Player.as, configurei uma função chamada lightsOut () que apaga as luzes usando uma chave / caixa. É lá que estou usando "this.stage.getChildAt (0) .greenLight1.visible = false;" e está funcionando perfeitamente. Também foi aqui que configurei a tática diferente que mencionei acima e tentei "Game.GL1.visible = false;" e isso funcionou perfeitamente também. Mas então, na minha subclasse chamada Controller.as onde tenho todos os manipuladores de mouse e teclado, tentei configurar um ouvinte de evento para um dos meus botões de palco. Então, eu a coloquei na função de construtor Controller, onde todos os meus outros ouvintes de eventos estão configurados e já estão trabalhando (eles usam "stage.addeventlistener ...") e foi aqui que comecei a ver erros. Então, pensei em tentar desligar o greenLight1, pois já sabia que o código estava funcionando e tentei tanto a linha "this.stage.getChildAt ...." quanto a linha "Game.GL1 ..." vê-los causar os erros que mencionei acima. Então, voltei para a minha classe Player.as e tentei na classe construtora Player e mais uma vez obtive os mesmos erros, embora eu esteja usando a mesma linha mais baixa na classe Player.as. Note que eu passei do palco para o Controller e Player e o tenho usado muito bem em ambos. Eu também tentei configurar uma chamada para outra função no construtor chamada Init (); e obteve o mesmo erro ao tentar acessar o greenLight1 lá também, mas ainda funcionava no lightsOut (). Também não tenho certeza se isso importa, mas todas as classes também estendem o MovieClip. Não sei se isso vai ajudar, mas aqui está o início da classe Player, juntamente com a função lightsOut, retirei o restante do código por não ter relaçã

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;
        }
    }

O que estou perdendo aqui

EDIT: OK, aqui está a classe do documento (pelo menos o que é importante para o Controller e Player):

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);

Aqui está a parte importante da classe Controller e eu adicionei um comentário ao que está falhando (a verdadeira razão pela qual eu comecei este post em primeiro lugar):

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

Essa última linha que eu adicionei apenas para ver se o greenLight1 poderia ficar invisível como posso quando eu o chamo na função lightsOut () que observei no Player.as. Mas ele NÃO funciona quando colocado aqui no Construtor. SOCORRO!!!! ri muit

questionAnswers(3)

yourAnswerToTheQuestion