2010-07-06 4 views
5

Quel est l'équivalent de removeMovieClip() dans AS3?Comment faire un MovieClip supprimer lui-même dans AS3?

Apparemment, beaucoup ont la même question:
StackOverflow:

  1. How to completely remove a movieclip in as3
  2. Remove movie clip as3
  3. How to remove childmovieclip and add to new parent movieclip

Autres:

  1. removeMovieClip(this) in AS3?
  2. Destroy/Delete a Movieclip???
  3. Remove movie clip

Mais aucun de leurs solutions semblent fonctionner, pour moi:

Im travaillant sur Flash CS4 avec AS3:

I avoir un film très simple avec un seul bouton appelé cliquez sur. En appuyant sur le bouton, une nouvelle instance de pièce est créé:

this.click.addEventListener(MouseEvent.CLICK,justclick); 
function justclick(e:MouseEvent){ 
    var money=new coin 
    this.addChild(money) 
    money.x=e.stageX 
    money.y=e.stageY 
} 

Il pourrait ne pas être le meilleur code, mais il fonctionne très bien. Maintenant, la pièce MovieClip est censée montrer une petite animation et se retirer. En bon vieux AS2 j'aurais ajouté:

this.removeMovieClip() 

dans la dernière image de l'animation. Mais cela n'existe pas dans AS3.
J'ai essayé, sans succès:

this.parent.removeChild(this) // 'Cannot access a property or method of nullobject reference'...  

this.removeMovieClip() // 'removeMovieClip is not a function'  

removeMovieClip(this) //'call to possibly undefined method removeMovieClip'  

unloadMovie(this)//'call to possibly undefined method removeMovieClip'  

Solutions?

Merci,

Répondre

11
this.parent.removeChild(this); 

Celui-ci devrait fonctionner; c'est ce que j'utilise. Un problème que j'ai eu quand je suis passé à AS3 est que parfois, il ne serait pas ajouté comme un enfant droit, donc vous pourriez vouloir vérifier cela. Vous devez également importer flash.display par mettre ce en haut si vous n'êtes pas déjà:

import flash.display.* 

Vous devez également supprimer l'écouteur d'événement sur elle avant de le retirer.

+0

Merci, il s'agissait des auditeurs d'événements. Maintenant, cela fonctionne parfaitement. BTW qu'est-ce que'import flash.display. * 'Pour? – Skuge

+0

Il vous permet d'utiliser les fonctions des classes à l'intérieur du package d'affichage fourni avec flash. btw, si quelqu'un résout votre problème, vous devriez accepter cette réponse. ;) – Ullallulloo

+0

Aussi, juste 'import flash.display.MovieClip' fonctionnerait. – Ullallulloo

0

Si votre animation se termine sur le cadre 20.

Note: en utilisant 19 parce que les cadres de comptage flash de zéro (0) similaire à l'index de tableau.

class animatedCloud 
{ 

    public function animatedCloud(){ 
     addFrameScript(19, frame20); 
    } 

    private function frame20(){ 
     parent.removeChild(this); 
    } 
} 
0

Assurez-vous toujours que ces clips amovibles peuvent être collectés. Cette solution essuyait toutes mes instances d'un symbole de la bibliothèque de swf chargé:

var mc:MovieClip = new definition() as MovieClip; 
addChild(mc); 

mc.x = 1000 * Math.random(); 
mc.y = 1000 * Math.random(); 

mc.addFrameScript(mc.totalFrames - 1, function onLastFrame():void 
{ 
    mc.stop(); 
    mc.parent.removeChild(mc); 
    mc = null; 
}); 
0
public static function removeDisplayObject(displayObject:DisplayObject):void { 
    /* normal code 
    if(displayObject && displayObject.parent){ 
     displayObject.parent.removeChild(displayObject); 
    } 
    */ 
    displayObject ? displayObject.parent ? displayObject.parent.removeChild(displayObject) : null : null; 
} 
-1

J'utilise, dans une image-clé vide supplémentaire à la fin de la MovieClip qui devrait se retirer:

stop(); 
MovieClip(parent).removeChild(this); 

J'ai trouvé que c'était la meilleure solution.

Questions connexes