2013-05-12 5 views
0

J'essaye de supprimer l'objet appelé '_pokemon'. Il devrait être enlevé s'il est frappé dix fois par la pluie qui tombe appelée '_jednaLinia' (signifie '_Ligne'). J'utilise ce code, et oui, il fait le travail que mon _pokemon fait disparaître mais il est toujours détecté sur la fonction handleColisin. Et la classe principale continue toujours référence à ce parce que je suis cette erreur sur la classe Pokemon « Erreur # 1009:. Impossible d'accéder à une propriété ou une méthode d'une référence d'objet nul »hittest, removechild, objet non visible reste problème, flash, as3


Je quitte de nouveau à AS3 et essayé beaucoup de solution simple mais rien ne semble fonctionner comme je l'ai prévu. Si possible, veuillez répondre.

## some code I think is necessary, not all of it 
... 
public class Main extends Sprite 
{ 

    private var _pokemon:Pokemon;  
    public function Main():void 
    { 
     _starTimer = new Timer(30); 
     addEventListener(Event.ADDED_TO_STAGE, init); 
     _starTimer.addEventListener(TimerEvent.TIMER, start); 

    } 
    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init);  
     _starTimer.start(); 
     this.addChild(_pokemon); 

    } 




...and further... 

    private function _pokemonLive(e:Event = null):void 
    {   
     decreaseLive--;   
     if (decreaseLive == 0) 
     {    
      _pokemon.parent.removeChild(_pokemon);/i think i tried all methods 
      _starTimer.stop(); 
     } 
    } 

Et comme je l'ai mentionné. J'ai eu une erreur sur Pokemon Class, il a une fonction de mouvement aléatoire dessus. Et c'est où l'erreur 1009 montre. Si nécessaire, j'envoie plus de code.

+0

Quand appelez-vous _pokemonLive? Est-ce un écouteur d'événements? –

+0

Cette partie du code qui active _pokemonLive est dans la fonction privat qui est appelée avec timeEvent listener et s'appelle "start" 'code '.................. if (_pokemon. hitTestObject (_linia [count])) \t \t \t { \t \t \t handleCollision (_linia [count]); \t \t \t \t _pokemonLive(); \t \t \t \t \t \t} – derkarol

+0

Regardez ma réponse, il faut travailler, puis l'accepter. –

Répondre

0

Ajoutez 'booléen' à votre classe 'principale'.

changement

private function _pokemonLive(e:Event = null):void 
    {   
     decreaseLive--;      
      _pokemon.parent.removeChild(_pokemon); 
      _starTimer.stop(); 
    } 

à

private function _pokemonLive(e:Event = null):void 
    {   
     if(dead == false) 
     {  
     decreaseLive --; 
     if (decreaseLive == 0) 
     {    
      dead = true; 
      _pokemon.parent.removeChild(_pokemon);/i think i tried all methods 
      _starTimer.stop(); 
     } 
     } 
    } 
+0

Thx n'a pas essayé de cette façon. Donc je vais essayer. Et nous verrons. – derkarol

+0

Nah, ne fonctionne pas. Je vais jouer avec un peu booléen et voir ce que je peux accomplir mais je ne suis pas sûr si c'est le chemin. TY pour s'offrir de toute façon. – derkarol

+0

@derkarol Vous ne pouvez pas appeler removeChild (_pokemon) si pokemon est déjà supprimé. Recusez-vous une erreur avec mon code? Si oui, quoi? –