Skip to content


AS3 – Package ButtonStd ( Boton Estandar )

Objetivo

Partiendo del último ejemplo que creamos, vamos a mejorarlo añadiendo nuevas funcionalidades.

  1. Crear una clase que funcione como un botón
  2. Añadir elementos en el escenario
  3. Programar eventos onRelease, onRollOver, onRollOut en AS3

Necesitaremos:

  1. Archivo flash, en este caso lo llamaremos ejemplo2.fla
  2. Package asociado al boton, en este caso ButtonStd.as

Empecemos

Creamos una carpeta llamada ejemplo2 y dentro de ella creamos los ficheros ejemplo2.fla y ButtonStd.as. No vamos a explicar como crear dichos archivos.

Package ButtonStd

Abrimos ButtonStd.as ( automaticamente deberia abrirse con Flash ) y escribimos lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
package {
    // Definimos el nombre de la clase
    // Debe empezar por mayusculas y tener
    //  el mismo nombre que el archivo que la contiene
    public class ButtonStd {

        // Método constructor que inicializa la clase
        public function ButtonStd() {

        }
    }
}

Con esto no vamos a llegar muy lejos, pero es la estructura básica que debe tener nuestra clase de Boton Estandar. El AS2 soliamos usar MovieClips como botones, en AS3 no tenemos porque cambiar. Por otra parte también teniamos claro que en la gran mayoria de casos los botones ( movieclips ) realizaban acciones con determinados eventos del ratón ( onPress, onRelease, onRollOver, onRollOut ).

Por tanto sabemos que debemos importar dentro de la clase ButtonStd las clases asociadas a MovieClips y a Eventos de Raton

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package {

    // Contiene la libreria para objectos MovieClip
    import flash.display.MovieClip;
    // Contiene la libreria para manipulacion de eventos del raton
    import flash.events.MouseEvent;
    // Definimos el nombre de la clase
    // Debe empezar por mayusculas y tener
    //  el mismo nombre que el archivo que la contiene
    public class ButtonStd extends MovieClip {
        // Método constructor que inicializa la clase
        public function ButtonStd() {

        }
    }
}

Guardad el archivo y vamos al siguiente paso.

ejemplo2.fla

Ahora debemos crear un archivo fla con el nombre ejemplo2

Cread en el escenario un recuadro ( personalitzadlo como más os guste ), cread un campo de texto en blanco sobre el cuadro y con el nombre de label_txt

Una vez habeis hecho esto seleccionad dichos elementos y pulsad F8. Debeis rellenar los campos tal y como veis esta captura.

ejemplo2-buttonstd

Con esto lo que hemos es asociar nuestro package ButtonStd a un objeto de nuestra libreria.

Ahora cread una nueva linea de tiempo y su nombre debe ser AS ya que colocaremos el código que necesitamos a continuación. Si quereis el objeto que teneis en el escenario se puede borrar ya que lo hemos incluido en la libreria.

1
2
3
4
5
6
7
8
9
// Instancializamos la clase ButtonStd
var myButton:ButtonStd = new ButtonStd ();
// Ubicamos el nuevo ButtonStd
// ( fijaros que no es _x y _y )
myButton.x = 100;
myButton.y = 100;
// Añadimos el ButtonStd al escenario
// esto equivale a un attachMovie
addChild(myButton);

Modificando la etiqueta del nuevo boton

Para modificar la etiqueta asociada al botón usaremos el paso de variables. así pues fijaros como nos queda la clase. A parte añadimos un nuevo método para seleccionar y cambiar el valor del elemento label_txt que hemos creado dentro del botón.

Código package ButtonStd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package {

    // Contiene la libreria para objectos MovieClip
    import flash.display.MovieClip;
    // Contiene la libreria para manipulacion de eventos del raton
    import flash.events.MouseEvent;
    // Contiene la libreria para manipulacion de textos
    import flash.text.TextField;

    // Definimos el nombre de la clase
    // Debe empezar por mayusculas y tener
    //  el mismo nombre que el archivo que la contiene
    public class ButtonStd extends MovieClip {

        // Método constructor que inicializa la clase
        public function ButtonStd(_label:String) {
        this._label = _label;
        }

        // Metodo 'setter' para modificar la etiqueta del boton
        public function set _label(label:String):void {
            // Usamos la función getChildByName cuando queremos buscar un
            // elemento creado directamente en este caso y con nombre
            // label_txt. Por otra parte decimos que dicho elemento es
            // de tipo TextField mediante as [tipo]
            this.label_txt = getChildByName("label_txt") as TextField;
            label_txt.text = label;
        }
    }
}

Código de la línea de tiempo para modificar.

1
var myButton:ButtonStd = new ButtonStd ('EtiquetaBoton');

Eventos del boton

Vamos por la segunda parte, añadir eventos de ratón a nuestro botón. En este caso, vamos a hacer que cuando pasemos por encima el texto tenga otro color, y cuando estemos fuera recupere el color de texto original. Si pulsamos mostraremos por pantalla un simple trace.

Para ello, como nos gusta tener el código lo mejor estructurado posible vamos a crear un método donde vamos a definir todo lo relacionado con eventos y que vosotros debeis añadir al paquete actual. ( He borrado los comentarios para no alargar demasiado el codigo )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package {
   
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.text.TextField;
   
    public class ButtonStd extends MovieClip {
        // Hemos añadido una llamada al metodo que asigna eventos
        public function ButtonStd(_label:String) {
            this._label = _label;
            this.setEvents();
        }

        public function set _label(_label:String):void {
            this.label_txt = getChildByName("label_txt") as TextField;
            label_txt.text = _label;           
        }
       
        // Metodo para configurar los eventos asociados al boton
        private function setEvents():void {
           
            // asociamos un metodo al evento de pulsar el raton
            addEventListener(MouseEvent.CLICK, click_handler);     
           
            // asociamos un metodo al evento de pasar por encima con el raton
            addEventListener(MouseEvent.MOUSE_OVER, over_handler);     
           
            // asociamos un metodo al evento salir del boton con el raton
            addEventListener(MouseEvent.MOUSE_OUT, out_handler);                   
           
        }
       
        private function click_handler(event:MouseEvent):void {
            trace('click');
        }
       
        private function over_handler(event:MouseEvent):void {
            trace('over');     
        }
       
        private function out_handler(event:MouseEvent):void {
            trace('out');          
        }      
    }
}

Probad la película y vereis que sucede. Podeis asociar muchos más eventos, pero de momento con estos tres ya tenemos más que suficiente. De momento solo hacemos trace, así que vamos a modificar el evento MOUSE_OVER y MOUSE_OUT para que cambie el texto de color.

1
2
3
4
5
6
7
private function over_handler(event:MouseEvent):void { 
    this.label_txt.textColor = 0xff0000;
}
       
private function out_handler(event:MouseEvent):void {
    this.label_txt.textColor = 0x333333;       
}

Fácil, ¿verdad? Que si, no desespereis, si ha costado no es porque haya sido dificil, sino porque no tenemos nuestros amigos createEmptyMovieClip o attachMovie, o asignar directamente a un objeto. Pero vamos, es cuestión de paciencia.

Código completo de ButtonStd.as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package {
   
    // Contiene la libreria para objectos MovieClip
    import flash.display.MovieClip;
    // Contiene la libreria para manipulacion de eventos del raton
    import flash.events.MouseEvent;
    // Contiene la libreria para manipulacion de textos
    import flash.text.TextField;
   
    // Definimos el nombre de la clase
    // Debe empezar por mayusculas y tener
    // el mismo nombre que el archivo que la contiene
    public class ButtonStd extends MovieClip {
       
        // Método constructor que inicializa la clase
        public function ButtonStd(_label:String) {
            this._label = _label;
            this.setEvents();
        }

        // Metodo 'setter' para modificar la etiqueta del boton
        public function set _label(_label:String):void {
            // Usamos la función getChildByName cuando queremos buscar un
            // elemento creado directamente en este caso y con nombre
            // label_txt. Por otra parte decimos que dicho elemento es
            // de tipo TextField mediante as [tipo]
            this.label_txt = getChildByName("label_txt") as TextField;
            label_txt.text = _label;           
        }
       
        // Metodo para configurar los eventos asociados al boton
        private function setEvents():void {
           
            // asociamos un metodo al evento de pulsar el raton
            addEventListener(MouseEvent.CLICK, click_handler);     
           
            // asociamos un metodo al evento de pasar por encima con el raton
            addEventListener(MouseEvent.MOUSE_OVER, over_handler);     
           
            // asociamos un metodo al evento salir del boton con el raton
            addEventListener(MouseEvent.MOUSE_OUT, out_handler);                   
           
        }
       
        private function click_handler(event:MouseEvent):void {
            trace('click');
        }
       
        private function over_handler(event:MouseEvent):void { 
            this.label_txt.textColor = 0xff0000;
        }
       
        private function out_handler(event:MouseEvent):void {
            this.label_txt.textColor = 0x333333;       
        }
       
       
    }


}

Enlaces relacionados:

Display Object Container – LiveDocs Adobe
AS3 Mouse Events and Mouse Related User Actions

Posted in AS3.

Tagged with , , , , , .


5 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Dustito says

    Hola me parece genial esta clase y la estoy intentado adaptar a una galeria que estoy haciendo mi pregunta es la siguiente:
    en mi galeria tengo una variable que indica la categoria seleccionada y luego muestro las imagenes de esa galeria, ¿como modifico esa variable desde la funcion al hacer click en alguno de los botones de la clase?

  2. phillipo says

    Deberia ver un poco el codigo para poder saber realmente cual es la utilidad/funcionalidad de modificar dicha variable. Puede que en ultima instacion, deberias definir una varible global dentro del boton.

  3. puntalanza says

    genial, algo muy claro y muy útil. Gracias!

  4. phillipo says

    Me alegro que te haya sido de utilidad!

Continuing the Discussion

  1. Menu simple con ButtonStd - César Caballero linked to this post on Domingo, 8 Marzo 2009

    [...] archivo fla. Si teneis el anterior ejemplo2 podeis reeditarlo, o sino seguid los pasos de este post. 123456789101112131415161718192021222324// Array con etiquetas de los botones var labels:Array = [...]



Some HTML is OK

or, reply to this post via trackback.