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

onEnterFrame dentro de bucle (para expertos)

Estas en el tema de onEnterFrame dentro de bucle (para expertos) en el foro de Flash y Actionscript en Foros del Web. Hola, os quería comentar un problema que tengo a ver si alguien me puede ayudar. Se trata de crear 25 cartas y luego moverlas desde ...
  #1 (permalink)  
Antiguo 15/03/2006, 11:14
 
Fecha de Ingreso: enero-2005
Mensajes: 94
Antigüedad: 12 años, 11 meses
Puntos: 0
onEnterFrame dentro de bucle (para expertos)

Hola, os quería comentar un problema que tengo a ver si alguien me puede ayudar.

Se trata de crear 25 cartas y luego moverlas desde un punto inicial hasta otro punto. La cosa parece sencilla.

En primer lugar tengo esta función que me crea los 25 mc:

Código:
function RepartirCartes():Void
{
	var num_carta:Number;
	
	var eix_y_ini:Number = 33;
	var eix_x_ini:Number = 15;
	var eix_y:Number = 165;
	var eix_x:Number = 15;
	
	for( var n = 1; n <= 25; n ++ )
	{

		// compruebo si ya he utilizado la carta
		do
		{
			num_carta = 1 + random( 25 );
			
		}while( inArray( num_carta, _root.cartes_usades ) )
		
		_root.cartes_usades.push( num_carta );


		// creo la carta
		var carta:MovieClip = _root.createEmptyMovieClip( "carta_" + n, this.getNextHighestDepth() );
		carta.createEmptyMovieClip( "img", this.getNextHighestDepth() );
		carta.img.attachMovie( "carta" + num_carta, "carta_" + num_carta, this.getNextHighestDepth() );
			
		
		// muevo la carta desde la posición origen hasta la final
		Moviment( n, eix_x_ini, eix_x, eix_y_ini, eix_y );
		
		eix_x += 105;
		
		// cada 5 cartas bajo una fila y empiezo desde la primera columna
		if( (n % 5) == 0 )
		{
			eix_y += 105;
			eix_x = 15;
		}
	}
}
Si os habeis fijado dentro de la función RepartirCartes() llamo a la función Moviment() que tiene el siguiente código:

Código:
function Moviment( index:Number, x_ini:Number, x_fin:Number, y_ini:Number, y_fin:Number ):Void
{
	this["carta_" + index]._x = x_ini;
	this["carta_" + index]._y = y_ini;
	
	this.onEnterFrame = function()
	{
		this["carta_" + index]._x += ( x_fin - this["carta_" + index]._x ) / 2;
		this["carta_" + index]._y += ( y_fin - this["carta_" + index]._y ) / 2;
		
		if( Math.ceil( this["carta_" + index]._x ) == x_fin && Math.ceil( this["carta_" + index]._y ) == y_fin )
			delete this.onEnterFrame;
	}
}
El problema de todo esto está en que no me entra dentro del onEnterFrame a medida que voy creando las cartas. Crea las 25 cartas primero y cuando ha creado la última entonces sí que empieza a entrar en el onEnterFrame. Es decir sólo mueve la última carta.

¿Alguien tiene alguna sugerencia?
__________________
.
  #2 (permalink)  
Antiguo 17/03/2006, 05:45
 
Fecha de Ingreso: enero-2005
Mensajes: 94
Antigüedad: 12 años, 11 meses
Puntos: 0
¿Nadie tiene alguna idea?
__________________
.
  #3 (permalink)  
Antiguo 17/03/2006, 06:13
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 12 años, 5 meses
Puntos: 0
um.. que tal si todas las cartas las creas dentro de un mc?

entonces al onEnterFrame le asignas la instancia del mc que las contiene....

(puede ser una estupidez, pero quien sabe...)

entonces:

Código:
function Moviment( index:Number, x_ini:Number, x_fin:Number, y_ini:Number, y_fin:Number ):Void
{
	_parent.contienecartas._x = x_ini;
	_parent.contienecartas._y = y_ini;
	
	this.onEnterFrame = function()
	{
		_parent.contienecartas._x += ( x_fin - _parent.contienecartas._x ) / 2;
		_parent.contienecartas._y += ( y_fin - _parent.contienecartas._y ) / 2;
		
		if( Math.ceil( _parent.contienecartas ) == x_fin && Math.ceil( _parent.contienecartas._y ) == y_fin )
			delete this.onEnterFrame;
	}
}
ahora tendrias que crear las cartas dentro del mc "contienecartas", pero por lo que veo no deberias tener problemas...
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #4 (permalink)  
Antiguo 17/03/2006, 13:05
 
Fecha de Ingreso: enero-2005
Mensajes: 94
Antigüedad: 12 años, 11 meses
Puntos: 0
¡¡Me hace exactamente lo mismo!! Que lastima. Me gustaba la idea... Pongo lo que he hecho, a ver si ves algún fallo.

Primero he creado el mc contenedor, fuera de cualquier función. Tan simple como esto:

Código:
_root.createEmptyMovieClip( "contenidor", _root.getNextHighestDepth() );
Luego he modificado la función RepartirCartes(), para crear las cartas dentro del contenedor. Sólo he modificado esta linea:

Código:
var carta:MovieClip = _root.contenidor.createEmptyMovieClip( "carta_" + n, _root.contenidor.getNextHighestDepth() );
Y ya sólo me faltaba modficar la función Moviment(), que ha quedado así:

Código:
	_root.contenidor["carta_" + index]._x = x_ini;
	_root.contenidor["carta_" + index]._y = y_ini;
	
	contenidor.onEnterFrame = function()
	{
		_root.contenidor["carta_" + index]._x += ( x_fin - _root.contenidor["carta_" + index]._x ) / 2;
		_root.contenidor["carta_" + index]._y += ( y_fin - _root.contenidor["carta_" + index]._y ) / 2;
		
		if( Math.ceil( _root.contenidor["carta_" + index]._x ) == x_fin && Math.ceil( _root.contenidor["carta_" + index]._y ) == y_fin )
			delete contenidor.onEnterFrame;
	}
Seguiré probando. Si a alguien le biene la inspiración que lo diga, ¡estoy abierto a cualquier sugeréncia!

P.D.: Se entiende que sólo he transcrito las partes que he modificado.
__________________
.
  #5 (permalink)  
Antiguo 17/03/2006, 13:41
Avatar de LOCOHUESOS2  
Fecha de Ingreso: noviembre-2003
Ubicación: Cali - Colombia
Mensajes: 248
Antigüedad: 14 años
Puntos: 0
enviame el fla y tal vez te responda eso

bye

visita mi foro www.movilescripter.com
__________________
No creas que eres superior a mi sin antes ver mi trabajo webcol.net
  #6 (permalink)  
Antiguo 17/03/2006, 17:11
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 12 años, 5 meses
Puntos: 0
Código:
	_root.contenidor["carta_" + index]._x = x_ini;
	_root.contenidor["carta_" + index]._y = y_ini;
	
	contenidor.onEnterFrame = function()
	{
		_root.contenidor["carta_" + index]._x += ( x_fin - _root.contenidor["carta_" + index]._x ) / 2;
		_root.contenidor["carta_" + index]._y += ( y_fin - _root.contenidor["carta_" + index]._y ) / 2;
		
		if( Math.ceil( _root.contenidor["carta_" + index] ._x) == x_fin && Math.ceil( _root.contenidor["carta_" + index]._y ) == y_fin )
			delete contenidor.onEnterFrame;
	}

ojo con eso.. me da la impresion que deberia ser asi:
Código:
	_root.contenidor._x = x_ini;
	_root.contenidor._y = y_ini;
	
	contenidor.onEnterFrame = function()
	{
		_root.contenidor._x += ( x_fin - _root.contenidor._x ) / 2;
		_root.contenidor._y += ( y_fin - _root.contenidor._y ) / 2;
		
		if( Math.ceil( _root.contenidor._x ) == x_fin && Math.ceil( _root.contenidor._y ) == y_fin )
			delete contenidor.onEnterFrame;
	}
entonces mueves el clip entero, ya que dentro de "contenidor" estan la 25 cartas...
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #7 (permalink)  
Antiguo 19/03/2006, 10:53
 
Fecha de Ingreso: enero-2005
Mensajes: 94
Antigüedad: 12 años, 11 meses
Puntos: 0
Estoy de pega. He solucionado el problema que tenía creando una clase:

Código:
class moviment extends MovieClip
{
	
	function moviment( clip:MovieClip, x_ini:Number, x_fin:Number, y_ini:Number, y_fin:Number, acceleracio:Number )
	{
		clip._x = x_ini;
		clip._y = y_ini;
		
		clip.onEnterFrame = function()
		{
			clip._x += ( x_fin - clip._x ) / acceleracio;
			clip._y += ( y_fin - clip._y ) / acceleracio;
			
			if( Math.ceil( clip._x ) == x_fin && Math.ceil( clip._y ) == y_fin )
				delete clip.onEnterFrame;
		}
	}
}
¡Lo que me pasa ahora es que en vez de salir carta por carta, me salen todas a la vez! Yo quiero que salga la primera y hasta que no esté colocada en su sitio, que no salga la segunda.

Aquí pongo el código que utilizo para llamar a la clase. Este código quedaría dentro del bucle de la función RepartirCartes():

Código:
var carta:MovieClip = _root.createEmptyMovieClip( "carta_" + n, _root.getNextHighestDepth() );
carta.createEmptyMovieClip( "img", this.getNextHighestDepth() );
carta.img.attachMovie( "carta" + num_carta, "carta_" + num_carta, this.getNextHighestDepth() );
		
mov_carta = new moviment( carta, eix_x_ini, eix_x, eix_y_ini, eix_y, 2 );
__________________
.
  #8 (permalink)  
Antiguo 19/03/2006, 10:59
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 12 años, 5 meses
Puntos: 0
demonios...

..solo por curiosidad, probaste la solucion de arriba?
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #9 (permalink)  
Antiguo 19/03/2006, 11:11
 
Fecha de Ingreso: enero-2005
Mensajes: 94
Antigüedad: 12 años, 11 meses
Puntos: 0
Sí, la probé. Lo que hacía era mover todo el contenedor sólo una vez, es decir con todas las cartas juntas, hacia la posición de la última carta. No sé si me explico.
__________________
.
  #10 (permalink)  
Antiguo 19/03/2006, 13:36
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 12 años, 5 meses
Puntos: 0
aps, yo pense que eso era lo que querias.. que te moviera todo junto a otra posicion...

um.. podrias explicar nuevamente el objetivo? ando un poco lento ultimamente...
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #11 (permalink)  
Antiguo 19/03/2006, 17:39
Avatar de dexter_x740  
Fecha de Ingreso: julio-2003
Ubicación: cd. obregon, Sonora
Mensajes: 246
Antigüedad: 14 años, 4 meses
Puntos: 1
oye ya te fijaste donde tienes esta linea?


this.onEnterFrame = function()

la tienes dentro de la declaracion de la funcion que llamas Moviment, y si no me equivoco de ese modo el this esta haciendo referencia a la funcion Moviment y no a una linea de tiempo de un Mc
__________________
[D3X73®]
  #12 (permalink)  
Antiguo 20/03/2006, 01:06
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 12 años, 5 meses
Puntos: 0
Cita:
Iniciado por dexter_x740
oye ya te fijaste donde tienes esta linea?


this.onEnterFrame = function()

la tienes dentro de la declaracion de la funcion que llamas Moviment, y si no me equivoco de ese modo el this esta haciendo referencia a la funcion Moviment y no a una linea de tiempo de un Mc
that's that.
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
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 09:22.