2010-07-15 9 views
0

J'ai mis au point la méthode suivante pour la capture des erreurs tout au long de mes applications AS3:Afficher les erreurs détectées en dehors de l'IDE - surcharger/critiquer?

Dans la classe de document, définissez les méthodes suivantes:

//This is the handler for listening for errors 
protected function catchError(event:ErrorEvent):void 
{ 
    displayError('Error caught: ' + event.text); 
} 

//Creates a MovieClip with a TextField as the child. 
//Adds the MC to the stage 
protected function displayError(msg:String):void 
{ 
    var errorMC:MovieClip = new MovieClip(); 
    errorMC.graphics.beginFill(0xffffff); 
    errorMC.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
    errorMC.graphics.endFill(); 

    var errorTxt:TextField = new TextField(); 
    errorTxt.multiline = true; 
    errorTxt.width = stage.width; 
    errorTxt.height = stage.height; 
    errorTxt.selectable = true; 
    addChild(errorMC); 
    addChild(errorTxt); 

    errorTxt.text = 'Error(s) Caught: \n' + msg; 
} 

Pour faire face à des classes qui sont utilisées dans la classe de document ajouter ce qui suit afin que je puisse enregistrer les fonctions mentionnées précédemment:

protected var errorCatcher:Function; 
protected var displayError:Function; 

public function setErrorDisplayer(f:Function):void 
{ 
    displayError = f; 
} 

public function setErrorCatcher(f:Function):void 
{ 
    errorCatcher = f; 
} 

maintenant, je peux afficher les erreurs dans le fichier SWF lors de l'exécution, lors du test de l'application dans le navigateur.

Par exemple: (je n'ai pas testé ce qui suit, il est juste un exemple)

//Document class 
package com 
{ 
    import flash.display.MovieClip; 
    import flash.event.ErrorEvent; 
    import flash.text.TextField; 
    import com.SomeClass; 

    public class Document extends MovieClip 
    { 
    protected var someClass:SomeClass = new SomeClass(); 

    public function Document():void 
    { 
     someClass.setErrorCatcher(catchError); 
     someClass.setErrorDisplayer(displayError); 
    } 

    protected function catchError(event:ErrorEvent):void 
    { 
     displayError('Error caught: ' + event.text); 
    } 

    protected function displayError(msg:String):void 
    { 
     var errorMC:MovieClip = new MovieClip(); 
     errorMC.graphics.beginFill(0xffffff); 
     errorMC.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
     errorMC.graphics.endFill(); 

     var errorTxt:TextField = new TextField(); 
     errorTxt.multiline = true; 
     errorTxt.width = stage.width; 
     errorTxt.height = stage.height; 
     errorTxt.selectable = true; 
     addChild(errorMC); 
     addChild(errorTxt); 

     errorTxt.text = 'Error(s) Caught: \n' + msg; 
    } 
    } 
} 

Est-ce surpuissance ou suis-je manque une « meilleure pratique » ici?

Répondre

1

Vous pouvez simplement utiliser FireBug pour déboguer et sortir d'un fichier SWF dans le navigateur. Juste Google pour "firebug as3", et vous verrez une tonne de gens font cela.

Vous pouvez également utiliser quelque chose comme De MonsterDebugger. Il a beaucoup de fonctionnalités intéressantes. Pour un aperçu, consultez Lee Brimlows De MonsterDebugger video from GoToAndLearn.

+0

Parfait! MonsterDebugger est mon nouveau meilleur ami. –

+0

Ouais c'est vraiment génial. J'ai remarqué qu'il semble parfois ralentir le FPS, selon ce qui se passe. Mais à part ça, c'est génial. Le profiler de FlashDevelop est aussi mon meilleur ami :) –