FIREBUGTRACER (AS3) - UTILISER LA CONSOLE FIREBUG POUR VOS DEBUGS ACTIONSCRIPT
cs_bali_balo
Messages postés1378Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention 1 novembre 2010
-
18 août 2009 à 15:22
nray
Messages postés12Date d'inscriptiondimanche 24 décembre 2000StatutMembreDernière intervention18 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.
nray
Messages postés12Date d'inscriptiondimanche 24 décembre 2000StatutMembreDernière intervention18 mars 2010 11 déc. 2009 à 14:36
Merci beaucoup pour ton aide.
cs_mouahaha
Messages postés209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és12Date d'inscriptiondimanche 24 décembre 2000StatutMembreDernière intervention18 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és209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és12Date d'inscriptiondimanche 24 décembre 2000StatutMembreDernière intervention18 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és209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és12Date d'inscriptiondimanche 24 décembre 2000StatutMembreDernière intervention18 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és209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és12Date d'inscriptiondimanche 24 décembre 2000StatutMembreDernière intervention18 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és764Date d'inscriptionlundi 21 juin 2004StatutMembreDerniè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és1Date d'inscriptionmardi 23 mai 2006StatutMembreDernière intervention12 novembre 2009 12 nov. 2009 à 10:38
La classe fonctionne également avec la console de chrome :).
cs_mouahaha
Messages postés209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és715Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention10 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);
}
}
}
Il serait possible aussi d'avoir une fonction pour lister le contenu d'un XML créé dynamiquement.
Bye
aFaD
cs_mouahaha
Messages postés209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és1732Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention 9 mars 20152 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és209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 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és1732Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention 9 mars 20152 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és209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 12 sept. 2009 à 01:06
Merci tout le monde, content que ça plaise... :)
WhiteMagus
Messages postés764Date d'inscriptionlundi 21 juin 2004StatutMembreDerniè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és715Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention10 septembre 2009 8 sept. 2009 à 17:27
Bien vu !
Merci
blackwizzard
Messages postés1258Date d'inscriptionmercredi 21 mars 2001StatutMembreDernière intervention21 juin 20092 26 août 2009 à 12:26
Simple mais efficace!
cs_mouahaha
Messages postés209Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention 6 avril 20091 18 août 2009 à 15:25
Merci, ça fait plaisir ! :)
m.
cs_bali_balo
Messages postés1378Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention 1 novembre 20101 18 août 2009 à 15:22
Salut mouhahaha.
Rien à dire sur ta source, elle fonctionne nickel ! 10/10
11 déc. 2009 à 14:36
11 déc. 2009 à 13:54
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 !
11 déc. 2009 à 13:12
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.
11 déc. 2009 à 12:34
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.
11 déc. 2009 à 12:25
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,
11 déc. 2009 à 12:02
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.
11 déc. 2009 à 11:56
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...
11 déc. 2009 à 11:35
Ça devrait mieux fonctionner.
11 déc. 2009 à 11:28
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
12 nov. 2009 à 18:05
Bye !
12 nov. 2009 à 10:38
13 sept. 2009 à 12:57
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.
12 sept. 2009 à 20:53
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
12 sept. 2009 à 18:43
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...
12 sept. 2009 à 18:34
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 ;)
12 sept. 2009 à 13:40
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 ?
12 sept. 2009 à 12:12
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
12 sept. 2009 à 01:06
11 sept. 2009 à 20:17
8 sept. 2009 à 17:27
Merci
26 août 2009 à 12:26
18 août 2009 à 15:25
m.
18 août 2009 à 15:22
Rien à dire sur ta source, elle fonctionne nickel ! 10/10
b_b