FIREBUGTRACER (AS3) - UTILISER LA CONSOLE FIREBUG POUR VOS DEBUGS ACTIONSCRIPT

cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 - 18 août 2009 à 15:22
nray Messages postés 12 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 18 mars 2010 - 11 déc. 2009 à 14:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50455-firebugtracer-as3-utiliser-la-console-firebug-pour-vos-debugs-actionscript

nray Messages postés 12 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 18 mars 2010
11 déc. 2009 à 14:36
Merci beaucoup pour ton aide.
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
11 déc. 2009 à 13:54
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 !
nray Messages postés 12 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 18 mars 2010
11 déc. 2009 à 13:12
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.
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
11 déc. 2009 à 12:34
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.
nray Messages postés 12 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 18 mars 2010
11 déc. 2009 à 12:25
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,
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
11 déc. 2009 à 12:02
Essaye avec le code que j'ai posté dans la section Source de cette page, les lignes 4 à 28.
Il y a d'abord l'import oui, mais ensuite pour afficher quelque chose il faut utiliser la fonction log de la classe FirebugTracer.
Essaye avec le fichier fourni dans le zip si tu n'y arrive toujours pas.
nray Messages postés 12 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 18 mars 2010
11 déc. 2009 à 11:56
Aaaaaaaahh, forcément! Merci de cette précision.
Mais après l'avoir publié avec la page HTML, que j'ai ouvert après, je n'ai toujours rien qui s'affiche...J'ai juste à intégrer "import FirebugTracer;" sur l'image 1 de mon anim, en mettant le fichier FirebugTracer.as dans le même dossier que mon anim?

Merci encore pour tes réponses...
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
11 déc. 2009 à 11:35
Tu ouvres le SWF directement, c'est sans doute ce qui bloque. Intègre-le comme il faut dans une page web (en cochant HTML dans les paramètres de publication de Flash par exemple) et ouvre celle-ci dans ton navigateur.
Ça devrait mieux fonctionner.
nray Messages postés 12 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 18 mars 2010
11 déc. 2009 à 11:28
Bonjour mouahaha,

Je dois certainement être une brêle, car je n'arrive pas a faire afficher les erreurs... J'ai importé la classe dans mon swf, et mettant le fichier .as dans la même dossier puis j'ouvre mon swf avec le navigateur et active firebug avec la console...et là : rien ne s'affiche alors que dans flash ça n'arrête pas...

Merci de m'aider, svp.

nafl
WhiteMagus Messages postés 764 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 5 février 2010
12 nov. 2009 à 18:05
En effet, elle marche avec chrome, et du coup, avec Safari aussi (les webkit en sorte). Je viens de vérifié. Encore mieux du coup
Bye !
fratcha Messages postés 1 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 12 novembre 2009
12 nov. 2009 à 10:38
La classe fonctionne également avec la console de chrome :).
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
13 sept. 2009 à 12:57
Intéressant, je vais jeter un oeil à tout ça...
Je viens de découvrir ASDoc aussi, pour faire des documentations ActionScript comme les docs officielles d'Adobe, je vais peut-être m'en servir pour documenter cette classe.
Bien vu pour le * au lieu de String.
afad Messages postés 715 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 10 septembre 2009
12 sept. 2009 à 20:53
Alors quelques corrections a apporter, vu que je l'ai utilisé un peu^^
Si je veux connaitre la valeur x d'un object, le code renvoi une erreur puisqu'il attend un String et non un Nombre. Il faudrait plutôt écrire :

public static function log ( fString:*, fMode:String = LOG ) :void

histoire d'englober tous les types de valeurs possible à afficher.

Sinon pour le fun, me souvient qu'avec describeType(), on peut lister tous les paramêtres d'un object d'un seul coup. ça m'a donné l'idée d'ajouter une fonction qui renvoi la liste complète des propriétés d'un object.

Il faut importer le package :
import flash.utils.describeType;

et voilà la fonction :

public static function logObject ( fObject:* ) :void
{
//describeType renvoi un XML contenant les paramêtres, méthodes, variables d'un objet.
var description:XML = describeType(fObject);

//Le noeud accessor contient la liste des getters setters.
var liste: XMLList = description.accessor;
for each(var item: XML in liste)
{
try
{
var propItem:String = item.@name;
var valeurItem:* = fObject[propItem];
FirebugTracer.log(propItem + " : " + valeurItem);
}
catch(error:Error)
{
FirebugTracer.log(error, FirebugTracer.ERROR);
}
}
}

Ensuite il suffit de faire par exemple :

FirebugTracer.logObject(stage);
FirebugTracer.logObject(step1);

Il serait possible aussi d'avoir une fonction pour lister le contenu d'un XML créé dynamiquement.

Bye
aFaD
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
12 sept. 2009 à 18:43
Hmm oui je vois...
En général j'utilise les try...catch en dernier recours quand j'ai vraiment un bug non identifié ;)
J'aurais pas le réflexe d'en mettre partout...
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
12 sept. 2009 à 18:34
Non l'idée étant de supprimer toutes les exceptions qu'ActionScript pourrait générer et les transformer en appel firebug.

Mais cela ne fonctionnera que sur Firefox et avec le module Firebug installé. Donc pas forcément top.
D'autant qu'il faut penser à mettre un try...catch sur toutes les actions pouvant potentiellement générer une exception.

try...catch : Un petit tour dans le dico ;)
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
12 sept. 2009 à 13:40
Merci Blacknight !
J'essaierai de poster une version AS2 dès que j'aurais le temps.
Pour le try...catch, je suis pas sûr de voir ce que tu veux dire... Tu parles d'y mettre l'appel au javascript, c'est ça ?
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
12 sept. 2009 à 12:12
Superbe !

Plus qu'à utliser dans un try...catch pour éviter les exceptions du player (Exceptions auxquelles nous n'aurions pas pensé évidement... autrement c'est du débugage)
C'est plutôt pratique (également pour l'utilisateur !)

Y a-t-il une version AS2 ? Certains n'ont malheureusement pas encore franchît le pas (et certaines entreprises travaillent toujours en AS2)

10/10
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
12 sept. 2009 à 01:06
Merci tout le monde, content que ça plaise... :)
WhiteMagus Messages postés 764 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 5 février 2010
11 sept. 2009 à 20:17
Très utile, fonctionnel, et bien présenté, avec exemple concret, merci
afad Messages postés 715 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 10 septembre 2009
8 sept. 2009 à 17:27
Bien vu !
Merci
blackwizzard Messages postés 1258 Date d'inscription mercredi 21 mars 2001 Statut Membre Dernière intervention 21 juin 2009 2
26 août 2009 à 12:26
Simple mais efficace!
cs_mouahaha Messages postés 209 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 6 avril 2009 1
18 août 2009 à 15:25
Merci, ça fait plaisir ! :)

m.
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
18 août 2009 à 15:22
Salut mouhahaha.
Rien à dire sur ta source, elle fonctionne nickel ! 10/10

b_b
Rejoignez-nous