Pergunta

Eu estou acessando UIComponent personalizado através de um arquivo SWC do Flex 3. Este componente funciona bem em Flash CS3, mas usá-lo a partir Flex dá um erro estranho em draw ().

I adicionou componente SWC dentro sprite (com addChild) e o seu caminho em lib.

TypeError: Error # 1010:. Um termo é indefinido e não tem propriedades

at com.xxxx.highscores::HighScores/draw()

at fl.core::UIComponent/callLaterDispatcher()

Aqui é a função draw () deste componente UI:

protected override empate function (): void { isInitializing = false;

     page.Text.x = width / 2;
     page.Text.y = height / 2;

     drawBackground();

}

Foi útil?

Solução

Com apenas esse código, ele deve ser uma das páginas, ou page.Text, é nulo.

Indo pelos nomes, eu acho que a página é uma biblioteca objeto Flash que você criar com AS? Se assim for, eu acho um erro anterior está disparando antes de ser criado e ser swollowed pelo jogador (pode acontecer se o depurador ainda não anexado, ou problemas com o carregamento compartilhado librarys). 'Estágio' não estar pronto para novo objeto de exibição até que ele é adicionado à lista de exibição é comum.

EDIT: É um bug no componente: draw() sempre usa a propriedade highScoresModuleText na página: o que só é definido quando a página é uma HighScoresTextPage, e não qualquer uma das outras páginas, como por exemplo: HighScoresTablePage, que showHighsSores() define-a. Isso funciona no Flash presumivelmente porque o objeto está no palco, ou pelo menos é criado antes showHighScores() é chamado, então draw() é chamado em primeiro lugar, e uma vez que o componente não invalida, não é chamado depois.

O método correto nesse caso é ter show*() apenas definir algumas propriedades, então invalidate() ter figura draw()-lo mais tarde, mas uma solução rápida é apenas adicionar 'if (page.highScoresModuleText)' em torno das linhas ofensivas em draw(). Uma correção ainda mais rápida é criar e addChild() o componente precoce (como inicialização), e chamada showHighScores() muito mais tarde.

Isso funciona para mim:

package
{
    import flash.display.Sprite;
    import com.novelgames.flashgames.highscores.HighScores;
    import flash.events.MouseEvent;

    public class As3_scratch extends Sprite
    {
        private var highscore : HighScores;

        public function As3_scratch()
        {
            highscore = new HighScores();
            addChild(highscore);
            stage.addEventListener(MouseEvent.CLICK, onClick);
        }

        private function onClick(event : MouseEvent) : void
        {
            highscore.showEnterHighScore(50);
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top