2010-08-21 9 views
2

J'ai une classe nommée Level qui hérite MovieClip. Level a un enfant dans le concepteur avec le nom gridView et le gridView est utilisé dans le constructeur Level.
J'ai aussi une classe nommée Level1 qui hérite Level. quand j'essaie quelque chose comme addChild(new Level1()) j'obtiens erreur dans Level constructeur en disant gridView est nul. Qu'est-ce que je fais mal?Erreur d'héritage MovieClip en flash

Certaines parties du code:

public class Level extends MovieClip 
{ 
    public function Level() 
    { 
     var matrix:Matrix = new Matrix(); 
     matrix.translate(-250, -250); 
     matrix.rotate(Math.PI/6); 
     matrix.scale(1, 0.5); 
     matrix.translate(250, 250); 
     gridView.transform.matrix = matrix; // error here referred from: 
    } 
} 

public class Level1 extends Level 
{ 
    public function Level1() 
    { 
     super(); 
    } 
} 

addChild(new Level1()); // referred from here 
addChild(new Level()); // this worked fine 
+0

Le niveau 1 est-il lié à un MC dans la création qui contient un objet appelé gridView? Si ce n'est pas le cas, c'est votre problème - l'héritage des classes ne se produit que dans le code; Les classes enfants de niveau n'auront pas leur propre instance gridView uniquement parce que la classe parent en a une déclarée lors de la création. – fenomas

Répondre

0

exemple de code yould bien. est-ce que le gridView a vraiment le nom d'instance de "gridView" dans l'IDE flash?

+0

Oui, et le code est très long. Je vais ajouter des extraits – Dani

0

Sans code ou une compréhension de certains de vos paramètres, voici ce que je suppose que votre classe ressemble à:

package { 
    import flash.display.MovieClip; 

    public class Level extends MovieClip { 
     public var gridView:GridView; 

     public function Level() { 
      gridView.x = 100; 
     } 
    } 
} 

Cela suppose que gridView est un GridView mais il pourrait être quelque chose, vraiment.

Ce qui peut arriver, c'est que vous n'avez pas l'instance de votre instance gridView nommée correctement dans l'EDI Flash. Vous voudrez peut-être vérifier cela. Une autre possibilité est que vous soyez peut-être pris dans ce doux ballet où le mode «Strict Mode» est activé tout en ayant également «Déclarer automatiquement les instances de scène» également désactivé. Vous pouvez trouver ces cases en allant dans Paramètres de publication -> l'onglet Flash -> en cliquant sur le bouton qui indique Paramètres à droite de la liste déroulante Script. Cela signifie que vous devrez faire un peu plus de travail dans votre classe avec la déclaration automatique désactivée.

Pour un peu d'informations sur ce que vous pouvez et ne peut le faire en mode Strict jeter un oeil à ce débordement de la pile question: Summary of ActionScript 3 strict mode

Pour un peu sur les instances de la scène, il y avait ce débordement de la pile question: Flash AS3: ReferenceError: Error #1056: Cannot create property

+0

J'ai posté mon code, et ce n'est pas comme ce que vous avez écrit au début. quand j'essaie 'new Level()' ça fonctionne bien mais quand j'essaie 'new Level1()' il meurt bien que la déclaration 'Level' soit presque vide. – Dani

+0

Ah, j'ai commencé mon commentaire sur la question quand il n'y avait pas de code. Permettez-moi d'y jeter un autre coup d'oeil maintenant qu'il y a du code source. – Liam

0

Je vous suggère de déclarer publiquement 'gridView' dans votre classe 'Level'.

par ex. public var gridView: MovieClip;

Questions connexes