Comunidad de diseño web y desarrollo en internet online

onEnterFrame dentro de bucle

Citar            
MensajeEscrito el 18 Mar 2006 05:37 pm
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?

Por MiquelCS

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Mar 2006 08:19 pm
Es ocurre, porque el for es una sentencia que se ejecuta completa por frame, digamos que al poner un for en un frame, el tiempo de frame no acaba hasta que termina de ejecutarse el for y todas las instrucciones que haya en él, entonces una vez termina todo el codigo del frame, si se definió una función para EnterFrame, se volverá a ejecutar ésta, en un nuevo tiempo de frame, ya que onEnterFrame no es un bucle simple de programación, sino un evento que se lanza cada vez que se refresca el frame completo.

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

clabbrowser
Citar            
MensajeEscrito el 19 Mar 2006 12:22 pm
Sí, hasta aquí había llegado, pero tienes alguna solución para esto? No me importa si no se utiliza el onEnterFrame, si hay alguna manera de conseguir el mismo efecto, ya me vale.

Gracias por tu ayuda. :)

Por MiquelCS

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Mar 2006 04:27 pm
Descarga el componente tween de ladislav zigo, y usalo para animar las cartas, usando la llamada de callback que trae, para que se sigan lanzando cartas una vez acabe la animación.

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

clabbrowser
Citar            
MensajeEscrito el 19 Mar 2006 07:36 pm
Me han hablado de esta librería, pero la verdad es que no sé como instalarla. Cuando hago doble click me dice: "La extensión no es válida. La extensión no se instalará". ¿Hay alguna manera de instalarlo manualmente? Y otra pregunta, ¿cuando lo instale, mis .swf ya lo incorporaran por defecto, es decir los usuarios que quieran ver los .swf se lo tendrán que instalar también?

Gracias por la ayuda.

Por MiquelCS

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2006 11:03 pm
Qué maneras de complicarse la vida...

Código :

mc=this["carta_" + index]
mc.onEnterFrame=function(){
...
//Los "this" que hay aquí cambialos por "_root" o la instancia del mc en el que están contenidos, aunque en tu caso con //dejarlos solo en this funcionará.
this._x += ( x_fin - this._x ) / 2;
      this._y += ( y_fin - this._y ) / 2;
      
      if( Math.ceil( this._x ) == x_fin && Math.ceil( this._y ) == y_fin )
         delete this.onEnterFrame;
}

Poner todos los eventos onEnterFrame dentro de uno es buena idea cuando se tienen más de 50 funcionando a la vez, pero 25 en un periodo corto es algo que un pc normal puede soportar sin tener que pensar demasiado...
Saludos.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox

 

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