Comunidad de diseño web y desarrollo en internet online

Falta de detalles en la clase boton

Citar            
MensajeEscrito el 18 Jul 2008 10:14 pm
Que tal:

Me vendría bien un poco de ayuda si no es molestia.
Basándome en clases que he visto, se me dió por tirarme al mar a ver que pasa y logré que esta funcione, pero quisiera que cada boton se quede en estado presionado, luego del "onRelease" y que al quedar seleccionado ese se deseleccione el resto.

Estoy incluyendo la librería zigo para la animación.
En el . fla coloque 4 movie clips en el escenario a los que llamé
btn_1, btn_2, btn_3, btn_4, dentro de cada uno de ellos hay un movie clip llamado "mc" que cambia de color segun la animación colorTo de zigo que coloqué.
Además usé unos trace para comprobar que funcionara.

fragmento de código en el primer frame del .fla

Código :

#include "lmc_tween.as" 



Este es mi archivo llamado boton.as

Código :

    
/*************************************************************************************************************************************************************
************************************************************* Clase  para botones ***************************************************************
**************************************************************************************************************************************************************/
class boton extends MovieClip {
   function boton() {
      this.useHandCursor = false;
      //////////////btn/////////////////////////////////
      _root.btn_1.onRollOver = function() {
         trace(" Está posandose en el botón 1 ");
         mc.colorTo(0x0198AB, 1);
      };
      _root.btn_1.onRollOut = function() {
         trace(" Salió fuera del botón 1 ");
         mc.colorTo(0x666666, 1);
      };
      _root.btn_1.onPress = function() {
         trace(" Está presionado el botón 1 ");
      };
      _root.btn_1.onRelease = function() {
         trace(" Se soltó el botón 1 ");
      };
      //////////////btn_2/////////////////////////////////
      _root.btn_2.onRollOver = function() {
         trace(" Está posandose en el botón 2 ");
         mc.colorTo(0x0198AB, 1);
      };
      _root.btn_2.onRollOut = function() {
         trace(" Salió fuera del botón 2 ");
         mc.colorTo(0x666666, 1);
      };
      _root.btn_2.onPress = function() {
         trace(" Está presionado el botón 2 ");
      };
      _root.btn_2.onRelease = function() {
         trace(" Se soltó el botón 2 ");
      };
      //////////////btn_3/////////////////////////////////
      _root.btn_3.onRollOver = function() {
         trace(" Está posandose en el botón 3 ");
         mc.colorTo(0x0198AB, 1);
      };
      _root.btn_3.onRollOut = function() {
         trace(" Salió fuera del botón 3 ");
         mc.colorTo(0x666666, 1);
      };
      _root.btn_3.onPress = function() {
         trace(" Está presionado el botón 3 ");
      };
      _root.btn_3.onRelease = function() {
         trace(" Se soltó el botón 3 ");
      };
      //////////////btn_3/////////////////////////////////
      _root.btn_4.onRollOver = function() {
         trace(" Está posandose en el botón 4 ");
         this.txt_mc.colorTo(0x0198AB, 1);
      };
      _root.btn_4.onRollOut = function() {
         trace(" Salió fuera del botón 4 ");
         txt_mc.colorTo(0x666666, 1);
      };
      _root.btn_4.onPress = function() {
         trace(" Está presionado el botón 4 ");
      };
      _root.btn_4.onRelease = function() {
         trace(" Se soltó el botón 4 ");
      };
   }
}



espero haberme explicado bien, desde ya mil gracias.

espero respuesta.

charlyn

Por charlyn

45 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Jul 2008 09:49 pm
Yo con mas de 10 líneas de código me pierdo, pero he aquí una idea simple y efectiva

- Todos los botones son MovieClip con dos fotogramas, 1 inactivo, dos activo, en el onPress de cada uno

Código :

btn_1.onPress = function(){
   this._parent.seleccionado = this
  //accion específica
  for(var i in this._parent)
    if(this._parent[i]!=this) 
      (this._parent[i].gotoAndStop(1)
}


Mejor aún, si quiero que 10 botones hagan eso (btn_1 a btn_10), uso un loop

Código :

for(var i=1; i<11; i++){
 this["btn_"+i].onPress = function(){
   this._parent.seleccionado = this
  //accion específica
  for(var i in this._parent)
    if(this._parent[i]!=this) 
      (this._parent[i].gotoAndStop(1)
 }
}


Luego tienes que usar el nombre del botón para distinguir la acción específica

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Jul 2008 11:12 pm
gracias solisarg, pero a pesar de que es una forma muy interesante de hacerlo la que propones,
no es lo que estaba buscando.
Gracias de todos modos.
Voy a ver que encuentro por ahi.

charlyn

Por charlyn

45 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Jul 2008 05:12 pm
Lo que te propone solisarg te ahorrará un trabajo de 100 a 10, mejor héchale otra ojeada, porque no te has dado cuenta lo que te ha propuesto, te ha dicho que conviertas más de 100 líneas de código en al menos 10 líneas. No se a ti pero a mi me parece interesante.

Lo que quieres hacer se hace de esta manera: Cuando quieres que un movieClip que tiene eventos de botón se quede deshabilitado, debes utilizar la propiedad enabled, aquí está tu mismo código con la optimización de solisarg y la propiedad enabled:

Código :

class boton extends MovieClip {

   var colorsArray:Array;
   var i:Number;
   
   function boton() {

      colorsArray = new Array(0x0198AB, 0x0198AB, 0x0198AB, 0x0198AB);

      for(i = 0; i < colorsArray.length; i++){

         _root["btn_" + i].useHandCursor = false;

         _root["btn_" + i].numero = i;

         _root["btn_" + i].onRollOver = function():Void{

            trace("Está posandose en el botón " + this.numero);

            mc.colorTo(colorsArray[this.numero], 1);

         }

         _root["btn_" + i].onRollOut = function():Void{

            trace("Salió fuera del botón " + this.numero);

            mc.colorTo(0x666666, 1);

         }

         _root["btn_" + i].onPress = function() {

            trace("Está presionado el botón " + this.numero);
            this.enabled = false;

         };

         _root["btn_" + i].onRelease = function() {

            trace("Se soltó el botón" + this.numero);

         };

      }

   }

}



solamente tendrías que hacer que cuando se deshabilite el botón habilitar todos los demás, te recomiendo que utilices un ciclo también para que no tengas que poner el código de todos los botones con condiciones.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 16 Nov 2008 05:13 pm
Que tal:

Le escribo a solisarg. Hace un tiempo me pasaste un dato sobre boton activo e inactivo, al que no le presté mucha atención, pero luego chequeándolo mejor lo encontré muy bueno.
Pero lo que no logré es que cada boton que ha sido desactivado tenga una acción distinta de otro boton como por ejemplo un gotoAnd Play() creo que no entendí lo que me dijiste sobre usar el nombre del boton para distignguir la acción específica.
Realmente no lo logré, :( te paso aquí el código que me habías mostrado una vez, con lo que yo le agregué.

desde ya muchas gracias!!! :)

Código :

for (var i = 0; i<arr.length; i++) {
   //Duplicamos el mc
   attachMovie("btn", "btn"+i, i);
   //ubicamos los nuevos mc's en posicion x e y 
   this["btn"+i]._x = (i*121)+110;
   this["btn"+i]._y = 83.7;
   this["btn"+i].useHandCursor = false;
   this["btn"+i].onPress = function() {
      this._parent.seleccionado = this;
      //accion específica
      for (var i in this._parent) {
         
         if (this._parent[i] != this) {
            this._parent[i].enabled = true;
            this._parent[i].txt.txt_data.colorTo(0xFFFFFF, 0.2, "easeOutSine");
            this._parent[i].mc.alphaTo(100, 0.2, "easeOutSine");
            this._parent[i].txt.a1.slideTo(4, "_y", 0.3);
            this._parent[i].txt.a2.slideTo(116, "_y", 0.3);
         } else {
            this._parent[i].enabled = false;
            this._parent[i].mc.alphaTo(0, 0.2, "easeOutSine");
            this._parent[i].txt.txt_data.colorTo(0x999999, 0.2, "easeOutSine");
            this._parent[i].txt.a1.slideTo(27, "_y", 0.3);
            this._parent[i].txt.a2.slideTo(92, "_y", 0.3);
         }
      }
   }
}

Por charlyn

45 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 16 Nov 2008 11:09 pm
Llama a una función externa para que te normalice todos los botones, y luego aplicas los settings a ti mismo, usando this, no this._parent[i]

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Nov 2008 01:38 pm
He llamado a la función de la forma en que e dices y no me funciona, te molestaría pasarme un breve ejemplo?

gracias

charlyn

Por charlyn

45 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 17 Nov 2008 02:36 pm
Algo así:

Código ActionScript :

function normaliza(){
  for (var i = 0; i<arr.length; i++) {
     this["btn"+i].enabled = true;
     this["btn"+i].txt.txt_data.colorTo(0xFFFFFF, 0.2, "easeOutSine");
     this["btn"+i].mc.alphaTo(100, 0.2, "easeOutSine");
     this["btn"+i].txt.a1.slideTo(4, "_y", 0.3);
     this["btn"+i].txt.a2.slideTo(116, "_y", 0.3);
  }
}


en el botón

Código ActionScript :

this["btn"+i].onPress = function() {
  this._parent.normaliza()
  this.enabled = false;
  this.mc.alphaTo(0, 0.2, "easeOutSine");
  this.txt.txt_data.colorTo(0x999999, 0.2, "easeOutSine");
  this.txt.a1.slideTo(27, "_y", 0.3);
  this.txt.a2.slideTo(92, "_y", 0.3);
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Nov 2008 02:40 pm
Ahorrate los tween que no van, cambia así:

Código ActionScript :

function normaliza(nr:Number){ 
  for (var i = 0; i<arr.length; i++) { 
    if(i==nr) continue;
    ....


La llamada del botón

Código ActionScript :

this["btn"+i].onPress = function() { 
  this._parent.normaliza(Number(this.name.substr(-3)) 
  ...


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Nov 2008 02:50 pm
Bien!! este ejemplo que me muestras, me deja bien claro que tengo que seguir aprendiendo.
Pero desde ya, que me aclara mucho el panorama, sobre todo para reducir las INTERMINABLES líneas de código.

Mil gracias solisarg

charlyn

Por charlyn

45 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 18 Nov 2008 06:03 pm
Perdon por molestar de nuevo solisarg, pero hay algo que no logro hacer todavía :( y es que cada boton tenga una acción por ejemplo boton horarios : gotoAndPlay("Horarios");.
Arrójeme un poco de luz maestro!! por favor.

gracias de nuevo

charlyn

Por charlyn

45 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 18 Nov 2008 09:56 pm
Dado que lo escribes en un loop, no puedes hacer magia. Si por ejemplo todos fueran gotoAndStop("etiqueta"), pordrías hacer un array de etiquetas y usarlas por índice, algo así:

etiquetas = ["home", "quienes", "que", "horarios"]

Luego en el loop

Código ActionScript :

this["btn"+i].onPress = function() { 
 ....
 gotoAndPlay(etiquetas[Number(this.name.substr(-3)]) 
} 


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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