Cristalab

Crear una Botonera Dinámica en ActionScript 2.0

   Foros de discusión -> Tips, ¡Envía tus trucos aquí!
Mensaje Autor
Mensaje Publicado: Mar Nov 06, 2007 9:47 pm     Citar   firefox 
Mediante este tip voy a explicar cómo crear una botonera dinámica como esta:



Para empezar vamos a crear un clip en nuestra biblioteca que sera nuestro botón modelo, también creamos un campo de texto dinamico instanciado como "t"



Luego, cuando ya tenemos nuestro botón en la biblioteca, hacemos click con el boton derecho, y en la parte de vinculación le damos un nombre y aplicamos la opción de vinculación para Actionscript y exportar en el primer fotograma.



Ahora vamos con el código.

Primero creamos un MovieClip vacio q contendrá los botones.

Código :

this.createEmptyMovieClip("botonera",this.getNextHighestDepth());


Luego declaramos un Array que contendrá la cantidad de botones a crear y sus nombres.

Código :

var labels:Array = Array("home","about","services","contact");


Ahora con width() escribimos dentro del clip vacio para evitar problemas de rutas.

Código :

with(botonera){
}


Primero posicionamos la botonera:

Código :


with(botonera){
   this._x = 50;
}


Luego creamos un for seteado por la longitud del Array.

Código :


with(botonera){
  this._x = 50;
  for(i=1;i <= labels.length; i++){
  }   
}


Ahora declaramos una vaiable de tipo MovieClip que funcionara de modelo a nuestros botones y le damos por valor cada boton attachado.

Código :


with(botonera){
  this._x = 50;
  for(i=1;i <= labels.length; i++){
    var modelButton:MovieClip = this.attachMovie("boton", "boton"+i , this.getNextHighestDepth ());
  }   
}


Posicionamos los botones.

Código :


with(botonera){
  this._x = 50;
  for(i=1;i <= labels.length; i++){
    var modelButton:MovieClip = this.attachMovie("boton", "boton"+i , this.getNextHighestDepth ());
    modelButton._x = 0;
    modelButton._y = ((i*0)+this._height) +5; //multiplicamos por 0, para q la distancia sea constante
  }   
}


Le ponemos título a cada botón, dados por los elementos del Array.

Código :


with(botonera){
  this._x = 50;
  for(i=1;i <= labels.length; i++){
    var modelButton:MovieClip = this.attachMovie("boton", "boton"+i , this.getNextHighestDepth ());
    modelButton._x = 0;
    modelButton._y = ((i*0)+this._height) +5; //multiplicamos por 0, para q la distancia sea constante
    modelButton.t.text = labels[i-1];
  }   
}


Ahora eventos de rollOver y rollOut.

Código :


with(botonera){
  this._x = 50;
  for(i=1;i <= labels.length; i++){
    var modelButton:MovieClip = this.attachMovie("boton", "boton"+i , this.getNextHighestDepth ());
    modelButton._x = 0;
    modelButton._y = ((i*0)+this._height) +5; //multiplicamos por 0, para q la distancia sea constante
    modelButton.t.text = labels[i-1];
    modelButton.onEnterFrame = function (){         
         //ecuacion para la trancicion de alpha
         //donde: a = transparencia
         //       v = velocidad de trancicion
         this._alpha += (this.a - this._alpha) /this.v;
                  
         //si el cursor esta sobre el boton...         
         if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
            //...cambia su transparencia al 50%
            this.a = 50;
            this.v = 5;
            
            //sino, vuelve o se mantiene al 100%
            } else{
               this.a = 100;
               this.v = 10;
            }
         }
       }
  }   
}


Finalmente para eventos de click usamos onMouseDown()

Código :

modelButton.onMouseDown = function (){
      if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
      if(this._name == "boton1"){
          trace("welcome home")//acciones
      }
      if(this._name == "boton2"){
         trace("about us")//acciones
      }
      if(this._name == "boton3"){
         trace("our services")//acciones
      }
      if(this._name == "boton4"){
         trace("contact us")//acciones
      }
   }
}


Cada botón nos muestra un mensaje distinto en el output.



Cómo ven para añadir otro botón solo deben agragar un elemento más al Array

Aquí pueden descargar el .fla

Espero les sirva Guiño

penHolder


clabLevel: 1778
| mdz |

19 Tips

MP Web     Google Talk    
Volver arriba
Mensaje Publicado: Mar Nov 06, 2007 10:20 pm     Citar   msie 
Esta muy bueno y practico!!!
*esperando la version de clases
 _________________

CarlosRuminott


clabLevel: 483 Genero:Masculino
Yo solo se que no se nada...

3 Tips

MP Web     Google Talk  MSN Messenger  
Volver arriba
Mensaje Publicado: Mar Nov 06, 2007 10:23 pm     Citar   msie 
no pude descargar el fla, me aparecireon un monton de simbolos raros y entre eso el AS, curioso nunca me habia pasado!!!
no importa lo voy a hacer manualmente.
 _________________

CarlosRuminott


clabLevel: 483 Genero:Masculino
Yo solo se que no se nada...

3 Tips

MP Web     Google Talk  MSN Messenger  
Volver arriba
Mensaje Publicado: Mie Nov 07, 2007 5:48 am     Citar   firefox 
Buen aporte, pero...

Código :

modelButton._y = ((i*0)+this._height) +5; //multiplicamos por 0, para q la distancia sea constante
constante??? es decir siempre cero??? Confundido
Esto debería ser solamente:

Código :

 modelButton._y = this._height+5;
 _________________
+Otaku RzO+
// Viviendo en Twitter U_U

Otaku RzO

Héroes
clabLevel: 291 Genero:Masculino
TwitterLand


MP Email Web     Google Talk  MSN Messenger  
Volver arriba
Mensaje Publicado: Mie Nov 07, 2007 11:45 am     Citar   firefox 
Que tal chicos el tutorial es muy bueno peroooo hay varios comentarios que debo hacer Lengua
Otaku ya se dio cuenta de un error pero..

La onda sería así..

Código :

 modelButton._y = (this._height*i)   (5 * i);


Y para hacerlo mas practico sería cuestión de crear una var "distancia" donde ahi la modificamos a gusto, sin tener que buscar ese 5 escondido.

Otra cosa,, para los estados de over y out, definitivamente no usaría onEnterFrame, sino preguntale a Freddie Aw Crap
De ultimaaaa le haces un enterframe que inicie cuando estás sobre el boton, y que este se elimine cuando se sale de el y ya.

Yo por lo general lo que hago (que ya me lo tome como mi estandar de botoneras) es dentro del MC le creo 2 o 3 labels en la linea de tiempo(o más si es necesario). Algo como INN, OUT, OFF, y por ejemplo

Código :

boton.onRollOver = function(){
   this.gotoAndPlay('INN');
}

Esto es bueno por si queremos hacer algun efecto que no podemos lograr en AS o que nos llevaría mucho menos tiempo realizarlo "manualmente". O también podría suceder si no sabemos tanto AS como para crear efectos "zarpados" (es mi caso Triste )

Saludos chicaos.

Raxiro_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mie Nov 07, 2007 11:47 am     Citar   firefox 
Fe de erratas (son las 8:50am!! Lengua)

Código :

modelButton._y = (this._height*i)   (5 * i);

Raxiro_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mie Nov 07, 2007 11:49 am     Citar   firefox 
otra vez io... bueno no sale el más y nose porque

Código :

 modelButton._y = (this._height*i) "MAS" (5 * i);

Raxiro_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mie Nov 07, 2007 5:02 pm     Citar   firefox 
@Raxiro: lo probaste ?! Se separa mucho U_U
En si debería ser:

Código :

modelButton._y = (modelButton._height + 5)*i;

Pero si no quieren el espacio vacío al inicio:

Código :

modelButton._y = ((modelButton._height + 5)*i) - modelButton._height;
 _________________
+Otaku RzO+
// Viviendo en Twitter U_U

Otaku RzO

Héroes
clabLevel: 291 Genero:Masculino
TwitterLand


MP Email Web     Google Talk  MSN Messenger  
Volver arriba
Mensaje Publicado: Jue Nov 08, 2007 9:25 pm     Citar   firefox 
es cierto es q al escribir this, me lo toma como el clip botonera, y yo queria q se refiera a modelButton, zks por la correccion Bien
 _________________

I'm perfect in wickness

penHolder


clabLevel: 1778
| mdz |

19 Tips

MP Web     Google Talk    
Volver arriba
Mensaje Publicado: Mar Nov 20, 2007 3:49 pm     Citar   msie 
perfecto muy bueno. Pero cuando lo vinculo y lo paso a dreamweaver 8 el vinculo no funciona. Hice algo mal?

jose_blog
Invitado






        
Volver arriba
Mensaje Publicado: Lun Feb 25, 2008 2:02 pm     Citar   firefox 
si en ves de tirar un mensaje me llamara un swf, donde debo cambiar el codigo?

sarj
Invitado






        
Volver arriba
Mensaje Publicado: Lun Feb 25, 2008 7:56 pm     Citar   firefox 

sarj escribió:

si en ves de tirar un mensaje me llamara un swf, donde debo cambiar el codigo?

Si en vez de preguntar checaras primero el tip completo? haber si esto te dice donde cambiarle

Código :

modelButton.onMouseDown = function (){
      if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
      if(this._name == "boton1"){
          trace("welcome home")//acciones
      }
      if(this._name == "boton2"){
         trace("about us")//acciones
      }
      if(this._name == "boton3"){
         trace("our services")//acciones
      }
      if(this._name == "boton4"){
         trace("contact us")//acciones
      }
   }
}
 _________________
::Nothing is Impossible::

flashreloco


clabLevel: 741 Genero:Masculino
En un mundo, donde dormir es para los débiles


MP Email Web     Google Talk  MSN Messenger  
Volver arriba
Responder al tema    Foros de discusión -> Tips, ¡Envía tus trucos aquí! Todas las horas son GMT
Página 1 de 1

Respuesta Rapida
Nick: 

  Citar el ultimo mensaje
Adjuntar tu firma

Mostrar mensajes de anteriores:
  

 


Cristalab BloodBerry Style © 2006 Cristalab
Powered by phpBB © 2001, 2002 phpBB Group