Comunidad de diseño web y desarrollo en internet online

Problema con onEnterFrame y clases

Citar            
MensajeEscrito el 15 Mar 2006 02:40 am
Hola, les cuento que estoy empezando a programar con clases y objetos gracias a uds. y su tutorial. Muy bueno, realmente es muy satisfactorio ^^ . Pero tengo un problema... miren este código:

Código :

class Luchador {
   //Identifica al Jugador 1 o al 2
   var NroJugador:Number;
   var Fuerza:Number;
   var Vida:Number;
   var VidaTotal:Number;
   var Velocidad:Number;
   private var Bloqueando:Boolean;
   var Cuerpo:MovieClip;

   //Funcion constructora
   function Luchador() {
      //Velocidad aleatoria (cambiar, debe depender de c/personaje)
      this.Velocidad = 20;
      trace("Un nuevo luchador ha nacido");
   }
   
   //Funcion que inicia al jugador, lo pone en el escenario listo para pelear!!!
   function IniciarJugador(Aux_Numero:Number) {
      this.NroJugador = Aux_Numero;
      trace(Aux_Numero);
      this.Cuerpo = _root.cuerpo_modelo.duplicateMovieClip("CuerpoJ"+Aux_Numero, 30+Aux_Numero);
      //Pone el cuerpo en el escenario y lo pone en vista
      this.Cuerpo._y = 600;
      this.Cuerpo._alpha = 100;
      this.Cuerpo._yscale = 50;
      //Diferencia de posicion entre Jugador 1 y 2
      if (this.NroJugador == 1) {
         this.Cuerpo._xscale = 50;
         this.Cuerpo._x = 10;
      } else if (NroJugador == 2) {
         this.Cuerpo._xscale = -50;
         this.Cuerpo._x = 790;
      }

//---- problema -----------------------------------------------------------
      this.Cuerpo.onEnterFrame = this.Movimientos();
//---- problema ------------------------------------------------------------

      trace("El jugador "+this.NroJugador+" ha sido iniciado.");
   }
   
   //Funcion que hace que los jugadores se muevan
   function Movimientos() {
      //Le da el código al cuerpo de moverse y de las funciones de las teclas
      if (this.NroJugador == 2) {
         //Movimientos para el jugador 1
         if (Key.isDown(Key.BACKSPACE)) {
            this.Cuerpo._x -= this.Velocidad;
            trace("nos movemosss");
         }
         //Llega hasta acá,pero lo hace una sola vez... ?
      }
      //Hasta acá llega... el problema está en el if
      trace("¿moviendose? Posicion: "+this.Cuerpo._x);
   }
}

No está completo, pero el tema es que el programa hace todo bien (copia los cuerpos en pantalla, etc. ), pero NO me toma el onEnterFrame como tal, sino que lo ejecuta una sola vez... ¿?
El trace("¿moviendose? Posicion: "+this.Cuerpo._x); lo marca en la Pantalla de Salida una sola vez para cada jugador. Por alguna razón, pienso que el código lo ejecuta una sola vez. Extraño.
Por las dudas este es el código que va en el _root:

Código :

//Importa la clase luchador
import Luchador;
//Crea los dos jugadores
var Jugador1:Luchador = new Luchador();
var Jugador2:Luchador = new Luchador();
Jugador1.IniciarJugador(1);
Jugador2.IniciarJugador(2);

stop();


Y el MC cuerpo es uno que está invisible en el medio del _root, con la instancia de "cuerpo_modelo".


Desde ya les agradecería que me ayudaran, si bien el problema es complejo. Por las dudas les dejé todo el código, pero con lo que tengo problemas es con el onEnterFrame de la variable Cuerpo de el objeto, o sino con la función Movimientos.

[SWAT] Cuando postees código, usa las etiquetas [code] [/SWAT]

Por spirit1988

8 de clabLevel



 

opera
Citar            
MensajeEscrito el 15 Mar 2006 06:47 pm
el problema esta en la asignacion del onEnterFrame deberia probar con una asignacion de este tipo.

this.Cuerpo.onEnterFrame =function(){
this.Movimientos();
}

Por RedKiller

3 de clabLevel



 

msie
Citar            
MensajeEscrito el 17 Mar 2006 02:27 am
Mmm no, no me lo toma para nada. Como que el this se refiere,en ese caso, al MovieClip cuerpo más que a la clase, no?

Por spirit1988

8 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Mar 2006 02:58 am
yo que tu...tendria cuidado con esta linea...no estas encapsulando muy bien tu codigo. Le estas quitanto flexibilidad.

Código :

this.Cuerpo = _root.cuerpo_modelo.duplicateMovieClip("CuerpoJ"+Aux_Numero, 30+Aux_Numero);



ademas...deberia ser asi ya en el peor de los casos:

Código :

this.Cuerpo = _root.cuerpo_modelo.duplicateMovieClip("CuerpoJ"+Aux_Numero, 30+Aux_Numero);
this.Cuerpo.parent = this;



y al final

Código :

this.Cuerpo.onEnterFrame =function(){
this.parent.Movimientos();
}


saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 17 Mar 2006 04:38 am
Para únicamente asignar eventos a una función definida en tu clase, también puedes hacer esto:

Código :

import mx.utils.Delegate;
/*...................*/
this.Cuerpo.onEnterFrame = Delegate.create(this, Movimientos);


:wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 17 Mar 2006 10:57 pm
Gracias!!!

Por spirit1988

8 de clabLevel



 

opera

 

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