Comunidad de diseño web y desarrollo en internet online

Problemita con removeEventListener ENTER_FRAME AS3

Citar            
MensajeEscrito el 12 Feb 2013 10:52 pm
Hola...
Estoy haciendo un pequeño jueguito q consta de crear enemigos ("enemy") cada 2 segundos, y con otro movieclip llamado "Carro1" q esta en el escenario... si estos chocan "enemy" realiza una accion.
Hasta ahi todo bien y funciona perfecto, pero cuando realizo el removeEventListener, este no funciona!
"enemy" se queda realizando la accion una y otra vez x el EnterFrame.

Dejo el codigo para q puedan darme una mano.

Código ActionScript :

stop();
var army:Array;
var enemy:Enemy;
var gameTimer:Timer; 

AvoiderGame();

function AvoiderGame()
{
   army = new Array();
   var newEnemy = new Enemy(545,245);
   army.push( newEnemy );
   addChild( newEnemy );

   gameTimer = new Timer(2000);
   gameTimer.addEventListener(TimerEvent.TIMER,creaEnemy);
   gameTimer.start();
}

function creaEnemy(timerEvent:TimerEvent):void
{
   var newEnemy:Enemy = new Enemy(545,245);//ubicacion de inicio enemigo
   army.push( newEnemy );
   addChild( newEnemy );
   newEnemy.addEventListener(Event.ENTER_FRAME,Verifica);
}

function Verifica(e:Event) {
   for each (var enemy:Enemy in army)
   {
   if (PixelPerfectCollisionDetection.isColliding(Carro1,enemy,this,true))
   {
      enemy.removeEventListener(Event.ENTER_FRAME,Verifica);
      enemy.gotoAndPlay("s1");
   }
   }
}


Gracias. :)

Por raulcuya

6 de clabLevel



Genero:Masculino  

Peru

chrome
Citar            
MensajeEscrito el 13 Feb 2013 01:39 am
Tip: no uses un onEnterFrame por cada instancia creada, sino uno solo que chequea sobre toda la lista de activo, y los quita de la lista cuando verifica el choque. En gaming a este unico loop de control se lo suele llamar tick

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Feb 2013 03:14 pm
Gracias por responder Jorge, estoy averiguando sobre tick... pero no encuentro algo concreto.
Si fueras tan amable de mostrar algun ejemplo con mi caso. De crear un onEnterFrame para todos los movieclip y quitar independientemente a cada uno con el choque... Seria perfecto. :)

Por raulcuya

6 de clabLevel



Genero:Masculino  

Peru

chrome
Citar            
MensajeEscrito el 13 Feb 2013 03:27 pm
Soy muy vago escribiendo codigo, asi que mejor te doy unas pistas:

Crea un timer de 100 (igual que creaste gameTimer) que llame a Verifica cada 100 mms
Quita newEnemy.addEventListener y newEnemy.removeEventListener y simplemente recorre el loop en busca de colisiones. Si hay mas cosas que tienes que hacer constantemente, lo agregas en el mismo tick (que es simplemente algo que se repite, es decir un timer)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Feb 2013 06:30 pm
Gracias x tu respuesta Jorge...
Pero lo q dices hace lo mismo q el enterframe.
Te explico: Cuando Carro1 choca con cualquier enemy, este enemy va hacer una animacion con el gotoAndPlay("s1"), si despues del choque Carro1 se aleja funciona muy bien, pero si este sigue chocando, osea siguen en la misma posicion en q chocaron, se sigue repitiendo la animacion gotoAndPlay("s1") de enemy.
Por eso pense en enterframe, una vez chocado, se le quita el enterframe solo a este enemy y hace la animacion sin repetirse cuando los 2 esten en la misma pocision.
Con timer sucede lo mismo, pero habra una manera de quitar el timer solo al enemy chocado?
Espero entiendas mis dudas.
Gracias. :)

Por raulcuya

6 de clabLevel



Genero:Masculino  

Peru

chrome
Citar            
MensajeEscrito el 13 Feb 2013 06:44 pm
Ok, el timer es uno solo, no pertenece al mc, no se quita, sigue siempre, a menos que no existan mas elementos para chequear
la idea es bastante simple, supon que tienes un juego con 100 enemigos, eso es igual a 100 onEnterFrame rulando al mismo tiempo
Ahora imagina que hay un solo onEnterFrame que chequea por las coilisiones
¿Cual te parece que es mas efectivo?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Feb 2013 10:05 pm
Ok Jorge, gracias x ponérmela mas claro... Sin dudas el Timer o 1 solo enterframe va ser mejor.
Para solucionar este detalle, estoy usando un solo enterframe para verificar.
Entonces ahora hago un gotoAndStop("s1") y en ese frame esta la animación q se ejecuta una sola vez.
Nose si es lo correcto, pero funciona para mi propósito.
Gracias! :D

Por raulcuya

6 de clabLevel



Genero:Masculino  

Peru

chrome

 

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