2008-09-23 9 views
0

J'accède au fichier UIComponent personnalisé via le fichier SWC à partir de Flex 3. Ce composant fonctionne correctement dans Flash CS3, mais l'utiliser depuis Flex donne une erreur étrange dans draw().Utilisation du fichier SWC du composant Flash dans Flex

J'ai ajouté un composant swc dans Sprite (avec addchild) et son chemin LIB. TypeError: Erreur # 1010: Un terme est indéfini et n'a aucune propriété.

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

at fl.core::UIComponent/callLaterDispatcher() 

Voici le tirage au sort en fonction de ce composant d'interface utilisateur(): void { isInitializing = false;:

override tirage fonction protégée()

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

    drawBackground(); 

}

Répondre

3

Avec seulement ce code, il doit être l'une des pages, ou page.Text, est nulle.

En passant par les noms, je suppose que la page est un objet de bibliothèque Flash que vous créez avec AS? Si c'est le cas, j'imagine qu'une erreur précédente est en train de se déclencher avant qu'elle ne soit créée et que le joueur ne la suive (cela peut arriver si le débogueur n'est pas encore attaché, ou des problèmes de chargement de bibliothèques partagées). 'stage' n'est pas défini pour un nouvel objet d'affichage tant qu'il n'est pas ajouté à la liste d'affichage.

EDIT: Il est un bug dans le composant: draw() utilise toujours la highScoresModuleText propriété à la page: qui est définie uniquement lorsque la page est un HighScoresTextPage, et aucun des autres pages, par exemple: HighScoresTablePage, qui showHighsSores() ensembles il à. Cela fonctionne dans Flash probablement parce que l'objet est sur la scène, ou au moins est créé avant que showHighScores() soit appelé, ainsi draw() est appelé en premier, et puisque le composant n'invalide pas, n'est pas appelé après.

La bonne méthode dans ce cas est d'avoir show*() simplement définir certaines propriétés, puis invalidate() avoir draw() le découvrir plus tard, mais une solution rapide est d'ajouter simplement « if (page.highScoresModuleText) » autour des lignes incriminées dans draw(). Une solution encore plus rapide est de créer et addChild() le composant au début (comme le démarrage), et appelez 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); 
     } 
    } 
} 
+0

Merci, je me suis débarrassé de l'erreur maintenant, bu t toujours rien n'apparaît à l'écran lorsque je donne ces commandes en flex: highscore.showEnterHighScore (_score); highscore.drawNow(); Je suppose que c'est un autre bug. – Tom

+0

Que se passe-t-il si vous appelez simplement showEnterHighScore?les méthodes show *() semblent toutes mettre à jour l'affichage immédiatement, et ne semblent pas fonctionner avec draw() (donc c'est un peu cassé) –

+0

:(rien ne se passe, rien n'apparaît à l'écran, mais cet appel de fonction fonctionne à la place : highscore.showHighScores(); highscore.drawNow(); – Tom

0

Voici le lien de téléchargement à ce composant flash (gratuit) avec le code source http://www.novelgames.com/otherdownloads/highscores/

c'est ainsi que je l'appelle du projet Flex:

 addChild(highscore); 
     highscore.showHighScores(); 

-> accident se produit bientôt après cela

+0

BTW, la façon stackoverflowy d'ajouter des informations est d'éditer le message original, sinon l'information peut être perdue, et vous ne serez pas répertorié sur les questions sans réponse. –

Questions connexes