2016-05-14 5 views
1

J'ai une classe appelée ChestScene qui représente une scène/MovieClip dans un fichier .fla sur lequel je travaille. J'ai eu des tonnes de problèmes qui semblent être enracinés dans une incompréhension fondamentale de la façon d'utiliser correctement les objets auxquels du code est attaché. Je comprends que l'ajout de l'objet à la scène l'instancie automatiquement, donc maintenant tout ce que j'essaie de faire est d'instancier et d'ajouter à l'étape ChestScene() dans le constructeur de ma méthode Main. Je pensais que ce serait aussi simple que cela:Comment réparer une erreur # 1009 dans une classe ajoutée à Main?

public class Main extends MovieClip { 

    var chest:Chest = new Chest(); 

    public function Main() { 
     stage.addChild(chest); 
    } 

Mais je reçois cette erreur:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at Chest()/startScene() 
    at Chest() 
    at Main() 

Ma première question est pourquoi est nulle poitrine? L'objet existe dans mon fla. Si je l'ajoute à la scène en faisant glisser depuis la bibliothèque, la classe fonctionne comme prévu. addChild semble fonctionner sur d'autres objets que j'utilise de la même manière, donc je ne comprends pas pourquoi je ne peux pas l'utiliser sur cet objet. Comment utiliser la méthode Main pour instancier un objet et accéder/modifier les propriétés dudit objet par rapport à la scène? Et comment puis-je faire la même chose pour les objets imbriqués à l'intérieur de mon objet initial?

***** Modifier après la réponse

Merci pour votre réponse et pour moi apprendre à lire le message de débogage. EcrAccueil() était en effet le coupable, et la question était la suivante:

stage.addEventListener(Event.ENTER_FRAME, gameLoop) 

Suppression étape et en ajoutant l'auditeur à l'objet fixe cette erreur, si Kudos! Mais je suis toujours confus; pourquoi essayer d'ajouter l'auditeur à la scène cause une erreur nulle? Je ne comprends pas pourquoi la scène serait nulle à ce stade. En outre, en supprimant "cerf". à partir de l'addEventListener, la taille de l'image qui retient la scène est beaucoup plus petite, ce qui a recadré une grande partie de mon image. Pourquoi un écouteur d'événement affecte-t-il ma taille de scène et ma hauteur? C'est pourquoi j'ai aussi posé des questions sur comment positionner correctement les choses par rapport à la largeur et la hauteur de la scène, car je sais que cela a quelque chose à voir avec les erreurs.

+0

« * Je sais que c'est une grande question * » trop grand en fait. Traitons le # 1009 dans cette question. Posez la question relative à la mise à l'échelle dans une question distincte. – null

+0

Vous interprétez mal l'erreur. Il ne dit pas que le coffre est nul, il dit quelque chose à l'intérieur de la méthode startScene est nul ce que je devine est parce que vous référencez le «stage» qui est nul à ce point. – BotMaster

+0

Comme je l'ai dit, s'il vous plaît créer une nouvelle question distincte concernant vos problèmes avec la mise à l'échelle et le dimensionnement. Gardez les questions petites et spécifiques à un seul problème. Le problème de cette question était pourquoi vous avez reçu l'erreur. Ne pas hésiter à poser plus de questions. Il est encouragé sur ce site. Ce site n'a pas pour but de résoudre tous vos problèmes en un seul gros gâchis. – null

Répondre

0

why is Chest null?

Chest n'est pas null. C'est le constructeur de la classe et ne peut pas être null.

Vous devez faire attention à la trace de pile attachée à l'erreur (les lignes avec "at ..." sous le message). Il vous indique où l'erreur s'est produite. La lecture de bas en haut vous donne l'ordre des appels de méthode effectués.

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at Chest()/startScene() 
    at Chest() 
    at Main() 

Main() appelé Chest(), Chest() appelé startScene() et BOOM! c'est où l'erreur s'est produite.

Pour déboguer cette erreur, regardez startScene(). Quelque chose là-dedans est null.

En regardant votre code actuel:

stage.addChild(chest); 

Je suppose que vous aussi essayer d'ajouter quelque chose à stage dans Chest(). Mais stage n'est pas disponible (null) dans Chest(). En général, il est bad practice to add things to stage as can be read in the documentation of addChild()

ajouter simplement à l'objet et non stage:

addChild(chest); 
+0

@pocketrockets s'il vous plaît ne pas ajouter de code aux commentaires, éditez votre question pour inclure les informations supplémentaires. – null