Comunidad de diseño web y desarrollo en internet online

Ayuda con mi logica de programacion: CLASE AS2: BOTONERA

Citar            
MensajeEscrito el 26 Abr 2008 11:15 pm
ok...mas o menos estas es mi estructura:

Código :

clase{
variables
constructor{
evento onRelease{}
evento onRollOver{}
evento onRollOut{}
}
}


digamos que lo ques estoy haciendo es una clase que mejora los botones que por defecto que permite hacer el IDE de flash. En este caso se hace a travez de mc\\\'s.

la clase identifica 3 metodos:
onRelease, oRollOver, onRollOut.

La mejora es que identifica el fin de onRollOver y el fin de onRollOut (lo cual sirve para efectos de animacion, por ejemplo: que la animacion que ocurre entre el estado \\\"Encima\\\" y \\\"Presionado\\\" sea fluida y no cambie bruscamente la animacion).
Ademas identifica que boton ha sido presionado y cual ha quedado sin presionar, habilitandolo y deshabilitandolo respectivamente.

No es algo que no se haya hecho antes.

De que forma la ejecuto:
var miVar:claseBoton = new claseBoton(nombreDelBoton:MovieClip,onRollOverEnd:Number;onRollOutEnd:Number); <---todo esto se hace para cada boton, donde si por ejemplo los botones son duplicados, lo unico que cambiaria serian el \\\"nombre del boton\\\".

en donde onRollOverEnd, onRollOutEnd son los numeros respectivos de las etiquetas en donde sus estados terminan (sus obvios estados onRollOver y onRollOut) esto por el hecho de que en AS2 no se puede determinar el currenFrame de un nombre de etiqueta.

ejemplo de ejecucion:
var miVar:claseBoton = new claseBoton(boton1:MovieClip,12:Number;20:Number);
var miVar2:claseBoton = new claseBoton(boton2:MovieClip,12:Number;20:Number);
var miVar3:claseBoton = new claseBoton(boton3:MovieClip,12:Number;20:Number);

EL PROBLEMA:
problablemente mi logica.....
supongo al ser objetos diferentes, las variables no son las mismas, y por tanto no se conectan...
me refiero especificamente a una variable llamada \\\"deselecion\\\" que identifica que boton ha dejado de ser presionado...

bueno aqui va el codigo:

Código :

class botonMaestro {
//Se usa: var miVar:botonMaestro = new botonMaestro(nombreDelBoton:MovieClip, rollOverEnd:Number, rollOutEnd:Number);

   /* DECLARACION DE VARIABLES */
   var rollOverEnd:Number;
   var rollOutEnd:Number;
   var Colision:Boolean;
   var deseleccionado:MovieClip;


   /* CONSTRUCTOR
   En esta funcion se asignan los eventos y propiedades del boton */
   function botonMaestro(nombreDelBoton:MovieClip, rollOverEnd:Number, rollOutEnd:Number) {
      trace(\"El constructor de botonMaestro se ha ejecutado !!\");
      //se hace invisible al zona activa
      nombreDelBoton.hitMc._alpha = 0;

      _global.seleccionado;


      //EVENTO: onRollOver
      nombreDelBoton.hitMc.onRollOver = function() {
         trace(\"El evento onRollOver de botonMaestro se ha ejecutado !!\");
         trace(\"this: \"+this);
         this._parent.gotoAndPlay(\"rollOver\");

         this._parent.onEnterFrame = function() {
            //this=_level0.miBoton_suit
            //trace(\"onEnterFrame !!\");
            trace(\"currentframe: \"+this._currentFrame);
            if (this._currentFrame == rollOverEnd) {
               this.stop();
               trace(\"rollOverEnd\");
               delete this.onEnterFrame;
            }
         };
      };//termina evento \"onRollOver\"


      //EVENTO: onRollOut
      nombreDelBoton.hitMc.onRollOut = function() {
         trace(\"El evento onRollOut de botonMaestro se ha ejecutado !!\");
         trace(\"this: \"+this);
         //trace(\"seleccionado: \"+seleccionado);
         this._parent.gotoAndPlay(\"rollOut\");

         this._parent.onEnterFrame = function() {
            //this=_level0.miBoton_suit
            //trace(\"onEnterFrame !!\");
            trace(\"currentframe: \"+this._currentFrame);
            if (this._currentFrame == rollOutEnd) {
               this.stop();
               trace(\"rollOutEnd\");
               delete this.onEnterFrame;
            }
         };
      };//termina evento \"onRollOut\"

      //EVENTO: onRelease
      nombreDelBoton.hitMc.onRelease = function() {
         trace(\"\\n\");
         trace(\"released\");

         deseleccionado = seleccionado;
         seleccionado = this._parent;

         trace(\"DESseleccion: \"+deseleccionado);
         trace(\"seleccion: \"+seleccionado);

         //se deshabilita la zona activa(hitMc)
         this.enabled = false;

         //1.- carga inmediatamente la animacion
         //this.gotoAndStop(\"seleccionado\");

         //2.- Se espera hasta que rollOver termine para ejecutar la animacion
         this._parent.onEnterFrame = function() {
            trace(\"onEnterFrame !!\");
            //this=_level0.miBoton_suit
            trace(\"currentframe: \"+this._currentFrame);
            if (this._currentFrame == rollOverEnd) {
               this.gotoAndStop(\"seleccionado\");
               delete this.onEnterFrame;
            }
            //end if        
         };

         this._parent._parent[\"deseleccionado\"].hitMc.enabled = true;
         this._parent._parent[\"deseleccionado\"].gotoAndPlay(\"rollOut\");
         this._parent._parent[\"deseleccionado\"].onEnterFrame = function() {
            trace(\"onEnterFrame !!\");
            trace(\"currentframe: \"+this._currentFrame);
            if (this._currentFrame == rollOutEnd) {
               this.stop();
               trace(\"rollOutEnd\");
               delete this.onEnterFrame;
            }
            //end if        
         };
      };//termina evento \"onRelease\"




   }//cierra constructor \"botonMaestro\"


   //metodo de la clase
   function metododo1() {
      trace(\"metodo1 se ha ejecutado !!\");
   }

}//termina botonMaestro

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Abr 2008 11:21 pm
el MovieCLip necesitaria las siguientes etiquetas:
-deseleccionado (su estado normal)
-rollOver (y en su ultimo frame se puede crear otra etiqueta llamada onRollOverEnd)
-rollOut (y en su ultimo frame se puede crear otra etiqueta llamada onRollOutEnd)
-seleccionado

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Abr 2008 10:18 pm
ok, ya lo arregle, con una variable en el en el .SWF PRINCIPAL....variable la cual era leida y escrita (via SCOPE) por todas las instanctias de de la clase (.AS)

aunque aun tengo mis dudas, respecto por que no se pueden utilizar variables globales en una clase....

Por cpucpu

82 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2008 05:48 am
No pueden usarse porque violan el principio de encapsulación de la POO. En su lugar puede usar una variable estática dentro de la clase.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox

 

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