Comunidad de diseño web y desarrollo en internet online

Objeto fantasma

Citar            
MensajeEscrito el 12 Ago 2011 03:15 pm
Buenas, me surge la siguiente duda:

Tengo una classe, "Bala" que extiende a movieclip, con su correspondiente clip.

Desde otra classe al pulsar un boton, la bala sale disparada, al tocar a un objeto con hittest, debe destruir el objeto y a ella misma, pero, el objeto desaparece, y la bala tambien, pero solo la imagen, ya que sigue hacia delante,(al tocar otra imagen desaparece).


el codigo:

Código ActionScript :

if (a_key) {
            bala = new Bala();
            bala.x = pj.x;
            bala.y = pj.y;
            stage.addChild(bala);
            }
            if ( arbol.hitTest(bala) {
         
               stage.removechild(arbol);

         Balavelocidad = 0;
         stage.removeChild(bala);
         
      }else{Balavelocidad = 5}

      bala.y += Balavelocidad;

Por Phyronx

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Ago 2011 06:28 pm
Yo diria que es porque eliminas los MC pero no el listener de la función que ejecutas, crea un listener independiente para ello con su propia función. Así despues de la condición de choque entre un arbol y la bala llama a una función que remueva el listener y los dos MC.

Locke

Por locke23

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2011 08:22 pm
Despues habra mas de un disparo, y si creo un listener para el array de balas, y lo anulo al tocar uno el arbol, los otros tambien desapareceran,no?
Sino, alguntutorial donde se realize un disparo o algun tipo de choque para saber como hacerlo?

Por Phyronx

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Ago 2011 11:11 pm
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

Por maximil13

70 de clabLevel



Genero:Masculino  

Programador, estudiante de sistemas.

firefox
Citar            
MensajeEscrito el 13 Ago 2011 01:03 am
Muchissimas gracias maximil13!

Me ayudaste tambien en lo de comprobar si chocan entre 2 arrays! Lo pregunte por aqui, pero nadie me respondio. Andaba loco buscandolo.
Lo probare solo tenga un rato libre.
Una cosa, no conocia el "dispose()", y leyendo me encuentro con que sirve para eliminar BitmapData, tambien sirve con un movieclip? ya que la classe bala extiende a movieclip.

Gracias de nuevo.

Por Phyronx

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Ago 2011 12:19 pm
dispose() en este caso es un metodo que deberas escribir tu dentro de la clase Bala. En el deberás limpiar todo lo que pudiera hacer que tu Movieclip no sea recogido por el GarbageColector de flash. Yo puse "dispose" por hacer referencia a la palabra podria haber puesto "limpiar" u otra cosa . Suerte.

Por maximil13

70 de clabLevel



Genero:Masculino  

Programador, estudiante de sistemas.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.