Erreur après hitTestObject et removeChild (CS3)

Erreur après hitTestObject et removeChild (CS3) - Flash/ActionScript - Programmation

Marsh Posté le 15-04-2008 à 21:48:47    

Bonjour,
Je débute en AS3 et j'ai d'emblée un problème que je n'avais pas en AS2. Dans l'exemple suivant, après que le clip mc2 soit entré en collision avec mc1, mc1 est supprimé. Le problème est que si je déplace mc2 là où se trouvait mc1, une erreur est généré : le script tente de supprimer encore mc1 alors qu'il n'existe plus. Je ne comprend pas pourquoi le hitTestObject continue d'être actif!?  
 

Code :
  1. var mc1,mc2:Mc;
  2. mc1=new Mc;
  3. mc2=new Mc;
  4. addChild(mc1);
  5. addChild(mc2);
  6. addEventListener(Event.ENTER_FRAME,boucle);
  7. function boucle(evt:Event):void{
  8. mc2.x=mouseX;
  9. mc2.y=mouseY;
  10. if(mc2.hitTestObject(mc1)) removeChild(mc1);
  11. }


 
Merci si quelqu'un a la solution...


Message édité par malicious le 15-04-2008 à 21:49:11
Reply

Marsh Posté le 15-04-2008 à 21:48:47   

Reply

Marsh Posté le 16-04-2008 à 19:46:10    

Code :
  1. var mc1,mc2:Mc;
  2. mc1=new Mc;
  3. mc2=new Mc;
  4. addChild(mc1);
  5. addChild(mc2);
  6. addEventListener(Event.ENTER_FRAME,boucle);
  7. function boucle(evt:Event):void{
  8. mc2.x=mouseX;
  9. mc2.y=mouseY;
  10. if(mc1!=null) {
  11. if(mc2.hitTestObject(mc1)) removeChild(mc1);
  12. }
  13. }

Reply

Marsh Posté le 16-04-2008 à 22:51:38    

Merci,  
J'avais pensé à ça mais je pensais pas que ça provoquerait une erreur de tester l'existence d'une occurrence alors qu'elle n'est censée plus exister après un removeChild()...
Toutefois, j'ai testé avec la condition if(mc1!=null) ben... ça ne marche toujours :( Toujours la même erreur :
 
 
ArgumentError: Error #2025: Le DisplayObject indiqué doit être un enfant de l'appelant.
 at flash.display::DisplayObjectContainer/removeChild()
 at hitTestObject_fla::MainTimeline/boucle()
 
 
Qu'est-ce qui ne vas pas encore ?
 
EDIT: ça marche !
Après removeChild, il faut aussi définir la classe comme null
 

Code :
  1. if(mc1!=null && mc2.hitTestObject(mc1)) {
  2.  removeChild(mc1);
  3.  mc1=null;
  4. }


Message édité par malicious le 16-04-2008 à 23:21:15
Reply

Marsh Posté le 17-04-2008 à 21:43:59    

Autre possibilté mais cette fois-ci sans détruire l'occurrence de la classe (afin de pouvoir faire un autre addChild plus tard) :
 

Code :
  1. if(mc1.parent!=null) && mc2.hitTestObject(mc1)){
  2.  removeChild(mc1);
  3. }


Par contre j'ai un problème si je souhaite faire un removeChild() dans la timeline du clip (le clip disparait après 10 frames par exemple).  
- Dans le 2e cas (exemple ci-dessus), pas de problème:

Code :
  1. parent.removeChild(this);


Mais dans le premier cas (pour détruire complètement l'occurrence de la mémoire), comment faire référence et affecter "null" à mc1 dans le script du clip lui-même ?  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed