Dentro de la clase bala , tienes que poner un metodo que "borre" todo la imagenes que conponen la bala , si esta bala tiene listenes los anule tambien, detener animaciones y finalizar eliminandola del array.Si tienes muchos disparos necesitas un loop que evalue cada bala si impacta o no con otro array que contenga los árboles. el listener no tendria que estar vinculado ni a los árboles ni a las balas .
Código ActionScript :
var arboles:Array=new array(); // aqui tendras tus árboles.
var municion:Array=new array(); //y aquí tus balas.
var Balavelocidad:int=5;
stage.addEventListener(Event.ENTER_FRAME,evaluandoColicion),
private function evaluandoColicion(e:Event):void{
if (a_key) {
bala = new Bala();
bala.x = pj.x;
bala.y = pj.y;
municion.push(bala);
stage.addChild(bala);
}
disparo: for (var i:int=0;i<arboles.length;i++){
var tempArbol:Movieclip=arboles[i]; //creas una instancia temporal para referenciar al árbol
for(var e:int=0;e<municion.length;e++ ){
var tempMunition:MovioeClip=municion[e]; // lo mismo referencias el objeto "bala" evaluas.
if(tempArbol.hitTestObject(tempMunition)){
tempMunition.dispose(); // dispose es el metodo que limpiará tu Bala.
removechild(tempMunition);
municion.splice(e,1);
// lo mismo para el arbol.
tempArbol.dispose(); // dispose es el metodo que limpiará tu arbol.
removechild(tempArbol);
municion.splice(i,1);
break disparo; // aqui detenemos el loop con una referencia para evitar el error de busqueda de un objeto que ya esta borrado.
}else{
bala.y += Balavelocidad;//si no colisionó que se mueva la bala.
}
}
}
}
El codigo esta escrito de memoria , es probable que tenga errores ortográficos(ya sin mi IDE favorito no escribo nada, mucho CTRL+ SPACE) y no esta integrado a tu ejemplo 100% .Te lo dejo como ejemplo, pues hay mucho que desarrollar y corregir al respecto, ya que lo correcto es que la bala se moviera primero y despues evaluara si colisionó o no. otro dato a tener en cuenta es que no evalue las coliciones si los array estan vacios .
Espereo que te sirva ,saludos