Foros del Web » Creando para Internet » Flash y Actionscript »

Juegode navecitas: problemas con funciones en Flash8

Estas en el tema de Juegode navecitas: problemas con funciones en Flash8 en el foro de Flash y Actionscript en Foros del Web. Hola, muy buenas a todo el mundo. Tengo un problemilla con la ejecución de una función en flash. Resulta que tengo una función definida en ...
  #1 (permalink)  
Antiguo 28/08/2007, 12:47
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 20 años
Puntos: 0
Pregunta Juegode navecitas: problemas con funciones en Flash8

Hola, muy buenas a todo el mundo.
Tengo un problemilla con la ejecución de una función en flash.
Resulta que tengo una función definida en el primer frame de la línea de tiempo. Lo que hace es ver si los láser q dispara mi nave, colisionan con las naves enemigas. Para ello paso 3 parámetros: el nombre del láser (disp0,...,disp5), el nombre del enemigo(enemigo1, enemigo2 o enemigo3) y por último el valor que tiene destruir a cada tipo de enemigo.

El problema es q no me detecta las colisiones.

El código es el siguiente:

Código:
function colisionLaser(nombreLaser:String, nombreEnemigo:String, valorEnemigo:String){
	if (_root.nombreEnemigo.hitTest(_root.nombreLaser)){
		trace(nombreEnemigo);
		myLoop = new Sound();  // cargo el sonido de la explosión
		myLoop.attachSound("explosion2");
		myLoop.start();
		_root.puntos = Number(_root.puntos) + _root.valorEnemigo; //incremento la puntuación con el valor del enemigo derribado
		_root.destruidos += 1; // incremento el nº de enemigos destruidos
		_root.nombreEnemigo._x += 5; //invierto la animación para dar efecto de explosión en el aire
		_root.nombreLaser.removeMovieClip(); //borro el láser
		_root.nombreEnemigo.gotoAndPlay(15); //animación explosión de la nave enemiga
	 }
}
Ésta es la declaración. A continuación cree un MC vacío en la escena (en ese mismo frame) y le añadí el siguiente código en acciones:

Código:
onClipEvent(enterFrame){
	_root.colisionLaser("disp0", "enemigo1", "valorEnemigo1");
	_root.colisionLaser("disp1", "enemigo1", "valorEnemigo1");
	_root.colisionLaser("disp2", "enemigo1", "valorEnemigo1");
	_root.colisionLaser("disp3", "enemigo1", "valorEnemigo1");
	_root.colisionLaser("disp4", "enemigo1", "valorEnemigo1");
	
	_root.colisionLaser("disp0", "enemigo2", "valorEnemigo2");
	_root.colisionLaser("disp1", "enemigo2", "valorEnemigo2");
	_root.colisionLaser(disp2, enemigo2, valorEnemigo2);
	_root.colisionLaser(disp3, enemigo2, valorEnemigo2);
	_root.colisionLaser(disp4, enemigo2, valorEnemigo2);
	
	_root.colisionLaser("disp0", "enemigo3", "valorEnemigo3");
	_root.colisionLaser("disp1", "enemigo3", "valorEnemigo3");
	_root.colisionLaser(disp2, enemigo3, valorEnemigo3);
	_root.colisionLaser(disp3, enemigo3, valorEnemigo3);
	_root.colisionLaser(disp4, enemigo3, valorEnemigo3);
	
}
Declaro un enterFrame. Sería correcto?? Algún fallo??

Muchas gracias de antemano.
Saludos!!
  #2 (permalink)  
Antiguo 29/08/2007, 03:00
 
Fecha de Ingreso: mayo-2006
Mensajes: 77
Antigüedad: 18 años, 6 meses
Puntos: 1
Re: Juegode navecitas: problemas con funciones en Flash8

Hola

Estas pasando los parametros como nombres, deberías utilizar la funcion 'eval()' para hacer referencia a los MC.
De todas maneras, sería mas correcto (y sencillo) recibir los parametros como movieClips:

Código PHP:
function colisionLaser(laser:MovieClip enemigo:MovieClip valorEnemigo:MovieClip ){... 
Así podras tratar con ellos directamente, por ejemplo:

Código PHP:
enemigo._x += 5

Un saludo
  #3 (permalink)  
Antiguo 29/08/2007, 06:04
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 20 años
Puntos: 0
De acuerdo Re: Juegode navecitas: problemas con funciones en Flash8

Muchas gracias!! He solucionado el problema. Lo que hice fue lo q me dijiste. Pasé los parámetros como MC y, en la llamada a la función, les añadí "_root." delante. Ahora va perfecto.

Por si interesa, dejo aquí el código.

Código del frame en la línea de tiempo de la escena:
Código:
function colisionLaser(nombreLaser:MovieClip, nombreEnemigo:MovieClip, valorEnemigo:Number){
	if (nombreEnemigo.hitTest(nombreLaser)){
		myLoop = new Sound();  // cargo el sonido de la explosión
		myLoop.attachSound("explosion2");
		myLoop.start();
		_root.puntos = Number(_root.puntos) + valorEnemigo; //incremento la puntuación con el valor del enemigo derribado
		_root.destruidos += 1; // incremento el nº de enemigos destruidos
		nombreEnemigo._x += 5; //invierto la animación para dar efecto de explosión en el aire
		nombreLaser.removeMovieClip(); //borro el láser
		nombreEnemigo.gotoAndPlay(15); //animación explosión de la nave enemiga
	 }
}

Y ahora el código en el MC vacío desde el que llamo a la función:
Código:
onClipEvent(enterFrame){
	_root.colisionLaser(_root.disp0, _root.enemigo1, _root.valorEnemigo1);
	_root.colisionLaser(_root.disp1, _root.enemigo1, _root.valorEnemigo1);
	_root.colisionLaser(_root.disp2, _root.enemigo1, _root.valorEnemigo1);
	_root.colisionLaser(_root.disp3, _root.enemigo1, _root.valorEnemigo1);
	_root.colisionLaser(_root.disp4, _root.enemigo1, _root.valorEnemigo1);
	
	_root.colisionLaser(_root.disp0, _root.enemigo2, _root.valorEnemigo2);
	_root.colisionLaser(_root.disp1, _root.enemigo2, _root.valorEnemigo2);
	_root.colisionLaser(_root.disp2, _root.enemigo2, _root.valorEnemigo2);
	_root.colisionLaser(_root.disp3, _root.enemigo2, _root.valorEnemigo2);
	_root.colisionLaser(_root.disp4, _root.enemigo2, _root.valorEnemigo2);
	
	_root.colisionLaser(_root.disp0, _root.enemigo3, _root.valorEnemigo3);
	_root.colisionLaser(_root.disp1, _root.enemigo3, _root.valorEnemigo3);
	_root.colisionLaser(_root.disp2, _root.enemigo3, _root.valorEnemigo3);
	_root.colisionLaser(_root.disp3, _root.enemigo3, _root.valorEnemigo3);
	_root.colisionLaser(_root.disp4, _root.enemigo3, _root.valorEnemigo3);
}
De nuevo mil gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.