Forums Développement Multimédia

Aller au contenu

impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.

AS3 debug erreur CODE Actionscript

7 réponses à ce sujet

#1 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 29 May 2013 - 08:30 AM

Bonjour à tous, je solicite votre aide après mettre arraché les cheveux depuis 2 jours sur un bug ...

j'ai animé un petit jeu (de base sur power point) en flash afin de prendre en compte les "vente" & "budget".

Le principe l'utilisateur à plusieurs choix en fonction des situations qui lui sont présentées et en fonction de ces réponses cela impact son budget et ses ventes ...

le fla est une continuité d'image avec sur chacune d'elle un code bien précis qui correspond à l'action en fonction de la réponse

j'ai fait une première version qui marche très bien puis pour rendre le jeu plus sympa j'ai rajouté des qq animation ... et la problème ça marche plus !

en sortie j'ai :

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 Kronopoly3_fla::MainTimeline/frame21()

at flash.display::Sprite/constructChildren()

at flash.display::Sprite()

at flash.display::MovieClip()

at des1()

at flash.display::MovieClip/nextFrame()

at Kronopoly3_fla::MainTimeline/fl_ClickToGoToNextFrame()



J'ai tracé l'erreur ... mon "objet nul" c'est un clip bien présent sur ma scene dont l'occurrence est "lancer_des1" je ne comprend donc pas pourquoi il est "objet nul"

surtout que le code qui fait bugger le truc c'est un simple "lancer_des1.visible=false" ....

Pouvez-vous m'aider ?

merci d'avance !

bonne journée

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 29 May 2013 - 08:46 AM

Bonjour Gouj.

Que le truc soit simple ou non, à partir du moment ou flsh ne retrouve pas l'objet lancer_des1, il remontera toujours une erreur.

Si, pour tes animations, tu as utilisé les nouvelles transitions (bleu-ciel), Flash peut avoir un souci (parfois étrange) pour retrouver l'objet suivant la transition.
Dans ce cas, il vaut mieux utiliser 2 calques différents. 1 pour l'animation et un autre pour l'occurrence que l'on veut cibler.
Tpn objectif pour l'instant, c'est de mettre juste un trace(lancer_des1); jusqu'à temps d'obtenir autre chose qu'un null.

Après, ça va fonctionner de n.ouveau

#3 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 29 May 2013 - 09:20 AM

Bonjour dldler,

merci pour ta réponse rapide

j'ai tracé mon "lancer_des1" et en effet il me sort "null" ...

Pour info je n'ai pas d'animation ni sur ni dans le clip "lancer_des1".

comment puis-je faire pour que flash reconnaisse ce clip ?

merci d'avance,

Comment puis-je faire pour que

#4 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7010 messages

Posté 29 May 2013 - 09:26 AM

Salut,

Citation

Flash peut avoir un souci (parfois étrange) pour retrouver l'objet suivant la transition.

Lorsque les objets sont posés sur la timeline à la main et liés à des animations, il arrive que lors des animations le code aille plus vite que la création complète des objets. C'est à dire que le code est interprété mais l'objet n'a pas fini d'être créé par Flash, il existe bien car on le vois, mais ses propriétés et noms d'occurence prennent un peu plus de temps à être associés à l'objet, surtout si l'objet contient lui même d'autres objets qu'il faut aussi créer ou un contenu un peu lourd. C'est rare mais ça arrive, j'ai déjà eu le bug et on a pu le vérifier par des tests que j'avais fait à l'époque avec Nataly et dont je ne me souviens plus.

Une des solutions consiste à vérifier la présence de l'objet du genre :


if(nomObjet) {
   nomObjet.visible = false;
}
 

Si tu veux attendre que l'objet existe avant de faire une action dessus tu peux utiliser une fonction récursive :



effaceObjet();

function effaceObjet(){
   if(nomObjet) {
          nomObjet.visible = false;
   } else {
          effaceObjet();
   }
}
 

La fonction sera appellée en boucle tant que l'objet n'existe pas et s'arrêtera quand l'objet existe.

Tu peux aussi t'assurer de la présence de l'objet en le créant bien avant, comme le dit Didier.

#5 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 29 May 2013 - 09:33 AM

salut
le probleme peut etre autre (cf pj)
tu creer un clip que tu pose sur la scene
à la frame 15 tu a besoin d'y acceder donc tu lui donne un nom
et ba là flash le vera pas car il n'est pas nommé sur les frame d'avant
en faite ce qui compte c'esst de nommé le clip à la premiere frame ou il apparait

@Monsieur Spi
le probleme m'est aussi arrivé mais en AS2, en AS3 jamais
une des solutions que j'avais trouver (solution bien bourine ceci dit)
ecoute l'enterFrame
et descoute le tout de suite

à la premiere execution de l'enterFrame à priori tout est là ;-)
a+

Fichier(s) joint(s)

  • Fichier joint  test.fla   6.92 Ko   1 téléchargement(s)


#6 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7010 messages

Posté 29 May 2013 - 09:44 AM

@PaoDao >

Citation

ecoute l'enterFrame
et descoute le tout de suite

à la premiere execution de l'enterFrame à priori tout est là ;-)

Oui ça revient à peu près au même, il suffit d'exécuter un truc avant (genre un écouteur sur EnterFrame) pour laisser le temps à l'objet de finir de se créer, j'avais lu lors de mes tests que c'est dû au fait que Flash génére les objets créés à la main en partant du plus bas niveau pour remonter vers le niveau le plus haut, c'est à dire qu'il crée un conteneur, il le remplis couche après couche, puis lui attribue des propriétés (comme le nom d'occurence par exemple). Dans mon cas c'était pour trouver un petit clip "hit" placé dans un clip "joueur" à l'époque où je codais comme ça, le clip joueur était bien créé mais au moment de l'appel du code le clip "hit" n'était pas encore créé dans le clip joueur, et il fallait ajouter une latence quelque part pour attendre que le clip existe bien. Un comportement étrange qui m'avait fait m'arracher les cheuveux.

#7 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 29 May 2013 - 10:11 AM

Merci pour vos réponses,

j'ai testé la boucle pour attendre que l'objet soit créer mais il me sort :

Error: Error #1023: Il s'est produit un débordement de pile.


et mon lancer_des1 est toujours "null" ...

le truc étrange c'est que mon clip lancer_dès1 est bien présent sur ma scene lors de mon export (swf) :

- lors de mon test, quand j'arrive à la frame en question j'ai mon clip visible et il fonctionne (car quand si je clic sur son bouton "lancer" il me sort un num aléatoire puis reprend le cours du "jeu" en réalisant les calcul nécessaire sur le budget et les ventes)

Le pb étant que ce clip ne doit pas être visible dès le début mais après que l'utilisateur est cliqué sur la réponse qui nécessite un lancer de dès ... et la je sèche !

#8 Gouj

    Ceinture Jaune

  • Members
  • PipPip
  • 26 messages

Posté 29 May 2013 - 10:17 AM

bon J'ai bidouiller en m'inspirant de ton post paodao,

j'ai ajouter une image avant avec mon objet sur le coter de ma scene puis j'ai ajouter une interpolation pour le replacer au bon endroit au bon moment ... pas très propre ... MAIS

CA FONCTIONNE !

donc on peut dire pb résolu ...

Merci encore à tous



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP