2008-09-23 4 views
0

Ich greife auf benutzerdefinierte UIComponent via SWC-Datei von Flex 3. Diese Komponente funktioniert in Flash CS3, aber die Verwendung von Flex gibt einen seltsamen Fehler in draw().Flash Component SWC-Datei in Flex

Ich habe swc Komponente in Sprite (mit addchild) und seine in LIB Pfad hinzugefügt.

TypeError: Fehler # 1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.

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

at fl.core::UIComponent/callLaterDispatcher() 

ist die draw() Funktion dieser UI-Komponente:

Überschreibung geschützte Funktion draw(): void { isInitializing = false;

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

    drawBackground(); 

}

Antwort

3

Mit nur diesen Code, muss es entweder Seite sein, oder page.Text, ist null.

Mit den Namen, würde ich raten Seite ist ein Flash-Bibliothek-Objekt, das Sie mit AS erstellen? Wenn das der Fall ist, würde ich annehmen, dass ein vorhergehender Fehler ausgelöst wird, bevor er erstellt und vom Player geglättet wird (kann passieren, wenn der Debugger noch nicht angeschlossen ist oder Probleme beim Laden von freigegebenen Librarys). "Bühne" wird nicht für ein neues Anzeigeobjekt festgelegt, bis es zur Anzeigeliste hinzugefügt wird.

EDIT: Es ist ein Fehler in der Komponente: draw() verwendet immer die highScoresModuleText Eigenschaft auf der Seite: die nur gesetzt, wenn die Seite ein HighScoresTextPage, und nicht eine der anderen Seiten, zB: HighScoresTablePage, die showHighsSores() es Sätze zu. Dies funktioniert in Flash vermutlich, weil das Objekt auf der Bühne ist, oder zumindest erstellt wird, bevor showHighScores() aufgerufen wird, also draw() wird zuerst aufgerufen, und da die Komponente nicht ungültig wird, wird nicht nach aufgerufen.

Die richtige Methode ist in diesem Fall show*() nur einige Eigenschaften festgelegt hat, invalidate() dann draw() Figur es später heraus zu haben, aber eine schnelle Lösung ist es, nur ‚if (page.highScoresModuleText)‘ hinzufügen um die beanstandeten Linien in draw(). Eine noch schnellere Lösung ist es, die Komponente zu erstellen und addChild() früh (wie Start), und rufen Sie showHighScores() viel später.

Dies funktioniert für mich:

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

Danke, ich habe jetzt von Fehlern zu befreien, bu t immer noch nichts auf dem Bildschirm erscheint, wenn ich diese Befehle in Flex gebe: highscore.showEnterHighScore (_score); highscore.drawNow(); Ich denke, das ist ein weiterer Fehler. – Tom

+0

Was passiert, wenn Sie einfach showEnterHighScore aufrufen?Die show *() -Methoden scheinen alle sofort die Anzeige zu aktualisieren und scheinen nicht mit draw() zu funktionieren (so ist es irgendwie kaputt) –

+0

:(Nichts passiert, nichts erscheint auf dem Bildschirm, aber dieser Funktionsaufruf funktioniert stattdessen : highscore.showHighScores(); highscore.drawNow(); – Tom

0

Hier ist der Download-Link, um diese (kostenlos) Flash-Komponente mit Quellcode http://www.novelgames.com/otherdownloads/highscores/

das ist, wie ich es von Flex-Projekt nennen:

 addChild(highscore); 
     highscore.showHighScores(); 

-> Absturz tritt bald nach diesem

+0

BTW, der stackoverflowy Weg, um Informationen hinzuzufügen, ist es, den ursprünglichen Beitrag zu bearbeiten, sonst können die Informationen verloren gehen, und Sie werden nicht auf unbeantwortete Fragen aufgeführt. –