Firebugtracer (as3) - utiliser la console firebug pour vos debugs actionscript

Soyez le premier à donner votre avis sur cette source.

Vue 6 840 fois - Téléchargée 265 fois

Description

Cette source utilise la classe ExternalInterface d'AS3 pour communiquer avec la console JavaScript de Firebug. Je pense qu'un bon nombre d'entre vous connaissent déjà Firebug, cette extension pour Firefox dédiée au debug HTML/CSS/JavaScript.

Ma classe FirebugTracer va vous permettre d'afficher des logs et des messages de debug dans le panneau Console de Firebug depuis ActionScript, de façon très simple.

Source / Exemple :


Voici un exemple d'utilisation :
Vous le retrouverez dans le fla (format Flash CS3)

// Import the class
import FirebugTracer;

// Start a timer
FirebugTracer.startTiming("Execution time");

// Log a text in the Console
FirebugTracer.log("Hello World!");

// Log a warning
FirebugTracer.log("Something seems to be wrong...", FirebugTracer.WARN);

// Log an error
FirebugTracer.log("FATAL ERROR !", FirebugTracer.ERROR);

// Group logs
FirebugTracer.startGroup("This is a group");
FirebugTracer.log("This is line 1");
FirebugTracer.log("This is line 2");
FirebugTracer.log("This is line 3");
FirebugTracer.log("Now we are going to close the group");
FirebugTracer.endGroup();

// Stop and display timer
FirebugTracer.endTiming("Execution time");

Et le code de la classe elle-même :

package
{
	// - - - - - - - - - - -
	// IMPORTS
	
	import flash.external.ExternalInterface;
	
	// - - - - - - - - - - -
	// CLASS
	
	public class FirebugTracer
	{
		// Available display modes : (See http://getfirebug.com/logging.html for more details)
		
		public static const LOG		:String = "console.log";
		public static const DEBUG	:String = "console.debug";
		public static const INFO	:String = "console.info";
		public static const WARN	:String = "console.warn";
		public static const ERROR	:String = "console.error";
		
		// - - - - - - - - - - -
		// FUNCTIONS
		
		// Send a log to the Firebug console using the selected mode
		
		public static function log ( fString:String, fMode:String = LOG ) :void
		{
			if( ExternalInterface.available ) ExternalInterface.call( fMode, fString );
		}
		
		// Start a group
		
		public static function startGroup ( fString:String ) :void
		{
			if( ExternalInterface.available ) ExternalInterface.call( "console.group", fString );
		}
		
		// End a group
		
		public static function endGroup () :void
		{
			if( ExternalInterface.available ) ExternalInterface.call( "console.groupEnd" );
		}
		
		// Start a timer
		
		public static function startTiming ( fString:String ) :void
		{
			if( ExternalInterface.available ) ExternalInterface.call( "console.time", fString );
		}
		
		// Stop and display the timer
		
		public static function endTiming ( fString:String ) :void
		{
			if( ExternalInterface.available ) ExternalInterface.call( "console.timeEnd", fString );
		}
	}
}

Conclusion :


Pour utiliser cette classe vous devrez auparavant installer Firebug (gratuit) :
http://getfirebug.com

Une fois votre page ouverte dans Firefox, il vous faudra activer Firebug et le panneau Console si ce n'est pas déjà fait.

Pour plus de détails sur l'utilisation de la Console elle-même, voir ici :
http://getfirebug.com/logging.html

Si vous avez des questions, n'hésitez pas !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
18 mars 2010

Merci beaucoup pour ton aide.
Messages postés
209
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
6 avril 2009
1
Si ta fonction apparaitre2 est la même que apparaitre3, la référence nulle doit être sur la ligne monTimer.reset();
En effet tu déclares la var monTimer après cette ligne, donc elle n'existe pas encore.
Pour accéder au timer précédent il faut que tu le déclares à l'extérieur de ta fonction.
De toute façon vu l'utilisation tu ferais mieux de faire des timers à usage unique : monTimer = new Timer(1500, 1); et de metter l'écouteur sur l'évènement TIMER_COMPLETE au lieu de TIMER. Du coup tu peux virer la ligne avec le reset() et ça devrait aller.
Il y aurait pas mal d'optimisation à faire mais je vais te laisser y réfléchir tout seul, je ne vais pas pouvoir t'aider plus. Si tu as d'autres questions, pose-les sur le forum, ce sera mieux que dans des commentaires de source.
Bon courage !
Messages postés
12
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
18 mars 2010

En fait voici mon code que j'utilise 25 fois (parceque pour l'instant je bloque sur les boucles) :
deco3.addEventListener(MouseEvent.MOUSE_DOWN,apparaitre3);
function apparaitre3(evt:MouseEvent){
deco3.alpha=100;
num3.alpha=0;

var ecoute:Sound = new Sound();
var adresseFichierSon:URLRequest = new URLRequest("utils/sons/tilk.mp3");
ecoute.load(adresseFichierSon); //chargement puis lecture du son
ecoute.play();
monTimer.reset();
var monTimer:Timer = new Timer(1500); // délai pour débloquer la déco suivante
monTimer.addEventListener(TimerEvent.TIMER, timerHandler);
monTimer.start();
function timerHandler(evt:TimerEvent):void {
deco4.mouseEnabled=true;
}

}

il j'ai l'erreur suivante : TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at calendrierAventFinal4Timereset_fla::MainTimeline/apparaitre2();

J'en peux plus de bloquer là, ça fait 3 jours... Pitié. Il y a quelque chose qui m'échappe.

Merci encore pour votre patience et vos explications.
Messages postés
209
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
6 avril 2009
1
En effet ça n'a rien à voir avec ma classe...
Tu fais appel dans un écouteur de Timer à quelque chose (variable) qui n'existe pas. Revois le fonctionnement de tes timers, c'est bizarre que tu aies besoin d'en créer autant. Réutilise plutôt ceux qui ne servent plus, en appelant leur fonction reset() avant de les redémarrer.
Messages postés
12
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
18 mars 2010

J'ai bien intégré les lignes de codes 4 à 28, à la suite de l'import de la classe, sur mon image1, mais ça ne fonctionne toujours pas, je ne sais plus comment faire. Je suis désolé de t'embêter...

Est ce que par hasard, tu pourrais m'éclairer sur mon code erreur, stp? :

TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at MethodInfo-44()
at flash.utils::Timer/flash.utils:Timer::_timerDispatch()
at flash.utils::Timer/flash.utils:Timer::tick()

En fait, je pense que mon problème vient du fait que j'ai intégré 25 fonctions Timer (sans répétition) dans mon anim, et que je ne sais pas comment les stopper... A ton avis?

Merci encore,
Afficher les 23 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.