Question

J'accède à UIComponent personnalisé via un fichier SWC à partir de Flex 3. Ce composant fonctionne correctement dans Flash CS3, mais son utilisation à partir de Flex génère une erreur étrange dans draw ().

J'ai ajouté un composant swc dans Sprite (avec addchild) et son chemin dans la lib.

TypeError: Erreur n ° 1010: un terme n'est pas défini et n'a aucune propriété.

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

at fl.core::UIComponent/callLaterDispatcher()

Voici la fonction draw () de ce composant d'interface utilisateur:

écrase la fonction protégée draw (): void {          isInitializing = false;

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

     drawBackground();

}

Était-ce utile?

La solution

Avec seulement ce code, ce doit être soit page, soit page.Text, est null.

En se basant sur les noms, je suppose que page est un objet de bibliothèque Flash que vous créez avec AS? Si tel est le cas, je suppose qu'une erreur précédente est en train de se déclencher avant sa création et son enregistrement par le lecteur (cela peut arriver si le débogueur ne s'est pas encore connecté, ou des problèmes de chargement de bibliothèques partagées). "stage" n'est pas défini pour le nouvel objet d'affichage jusqu'à ce qu'il soit ajouté à la liste d'affichage est commun.

EDIT: il s'agit d'un bogue dans le composant: draw () utilise toujours la propriété highScoresModuleText de la page: définie uniquement lorsque la page est un HighScoresTextPage , et pas les autres pages, par exemple: HighScoresTablePage , auquel showHighsSores () le définit. Cela fonctionne probablement dans Flash parce que l'objet est sur la scène, ou du moins est créé avant que showHighScores () soit appelé, de sorte que draw () est appelé en premier, et depuis le composant n'invalide pas, n'est pas appelé après.

Dans ce cas, la méthode correcte consiste à faire en sorte que show * () définisse simplement certaines propriétés, puis invalidate () pour obtenir draw () comprendre plus tard, mais une solution rapide consiste à ajouter simplement si (page.highScoresModuleText) 'autour des lignes incriminées dans draw () . Une solution encore plus rapide consiste à créer addChild () le composant au début (comme au démarrage) et à appeler showHighScores () beaucoup plus tard.

Cela fonctionne pour moi:

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);
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top