2010-07-06 11 views
5

¿Cuál es el equivalente a removeMovieClip() en AS3?¿Cómo hacer que un MovieClip se elimine solo en AS3?

Al parecer, muchos tienen la misma pregunta:
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

Otros:

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

Pero ninguno de sus soluciones parecen funcionar, para mí:

Im trabajando en Flash CS4 con AS3:

I tener una película muy simple con un solo botón llamado haga clic en. Al presionar el botón, se crea una nueva instancia de la moneda :

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 
} 

Tal vez no sea el mejor código, pero funciona bien. Ahora, se supone que la moneda MovieClip muestra una pequeña animación y se elimina. En un buen viejo AS2, habría agregado:

this.removeMovieClip() 

en el último fotograma de la animación. Pero esto no existe en AS3.
He intentado, sin éxito:

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'  

Soluciones?

Gracias,

Respuesta

11
this.parent.removeChild(this); 

Ésta debería estar trabajando; es lo que uso Uno de los problemas que tuve cuando cambié a AS3 es que a veces no se agrega como un derecho de niño, por lo que es posible que desee comprobarlo. También hay que importar flash.display a través de poner esto en la parte superior si no está ya:

import flash.display.* 

También debe eliminar el detector de eventos en él antes de retirarlo.

+0

Gracias, se trataba de los oyentes del evento. Ahora funciona perfectamente. BTW ¿Para qué es'import flash.display. * '? – Skuge

+0

Le permite usar funciones de las clases dentro del paquete de pantalla que viene con flash. Por cierto, si alguien resuelve su problema, debe aceptar esa respuesta. ;) – Ullallulloo

+0

Además, solo 'import flash.display.MovieClip' funcionaría. – Ullallulloo

0

Si la animación está llegando a su fin en el marco 20.

nota: usando 19 porque los marcos de conteo de flash de cero (0) similar al índice de matriz.

class animatedCloud 
{ 

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

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

Asegúrese siempre de que los clips de película autoextraíbles se puedan recoger. Esta solución se limpió todos mis instancias de símbolo de la biblioteca de un SWF cargado:

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

utilizo, en un fotograma clave en blanco extra al final del clip de película que debe sustraerse:

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

Considero que es la mejor y más adecuada solución.

Cuestiones relacionadas