controlCabecera

Escrito el 30/11/2003 por Xavi Beumala

La verdad es que hacía muchos días que no posteaba nada de código y tenía muchas cosas pendientes en el tintero.

Hoy he rescatado esta clase que tenía por el disco duro y que escribí hace un tiempo. Hoy, un domingo de esos que uno se queda en casa he decidido limpiarla un poco y hacerla pública.

La clase permite controlar la cabeza lectora de una animación para reproducirla en cualquier sentido; tanto hacia adelante como hacia atrás. Ya veréis que tanto su implementación como su uso son muy sencillitos. Se podría decir que sólo tiene un método público.

Aquí os podéis descargar un archivo que contiene un .fla con un ejemplo de uso y .as con la clase. El ejemplo consiste en lo que podría ser una ventana que se abre con una animación y se tiene que cerrar con la misma animación pero invertida. El .as está documentado y contiene lo siguiente:

/*        
        [AUTHOR]
                Xavi Beumala
                xavi@code4net.com
                http://www.code4net.com
                Este código lo puedes usar libremente y
                modificarlo según te convenga.
                
        [ DESCRIPCION ]
                Clase que permite controlar la cabeza
                lectora de la linea de tiempo. Permite
                reproducir hasta un determinado fotograma
                tanto hacia adelante como hacia atrás.

        [ EVENTOS ]
                @onStop();
                        Evento disparado cuando la cabeza
                        lectora llega al fotograma de destino

        [ CONSTRUCTOR ]
                @controlCabecera(clipDePelicula)
                        Al constructor de esta clase se le
                        pasa como parámetro una referencia del
                        clip de película que queremos controlar
                        
        [ MÉTODOS PÚBLICOS ]
                @mover(fotograma_destino)
                        Mueva la cabeza lectora hasta el
                        fotograma fotograma_destino.
                        fotograma_destino puede ser un
                        fotograma anterior como posterior al
                        fotograma actual

        [ UTILIZACIÓN ]
                El siguiente código crea una instancia de
                ControlCabecera        para llevar la cabeza lector
                del clip de película myAnim hasta
                el fotograma 20.
                
                <code>
                myControlCabecera =
                           new controlCabecera(myAnim);
                myControlCabecera.onStop = function() {
                        trace("hola");
                }

                myControlCabecera.mover(20);
                
                </code>
                
                Puedes descargar un ejemplo más completo en
                http://www.code4net.com/downloads/controlCabecera.zip
                
        [ NOTAS ]
                · Si queremos reproducir una animación hasta
                el final podemos pasar como parámetro al método
                mover() un valor elevado y mayor que el último
                fotograma de la aplicación.
                
                myControlCabecera.mover(1000);
*/

_global.controlCabecera = function(contenedor) {
        trace("new Control " + contenedor);
        this.ref_mc =
        contenedor.createEmptyMovieClip("controlCabecera_MC",999);
        this.ref_mc.contenedor = contenedor;
        this.ref_mc.controlador = this;
        this.contenedor = contenedor;
}

controlCabecera.prototype = new Object();

controlCabecera.prototype.mover = function(fin) {
        this.contenedor.fin = fin;        
        this.ref_mc.onEnterFrame =
                  (fin > this.contenedor._currentFrame) ?
                   this.__avanzar : this.__retroceder;        
}

controlCabecera.prototype.__retroceder = function() {
        var current = parseInt(this.contenedor._currentframe);
        if(parseInt(this.contenedor.fin) != current &&
           current > 0) {
                this.contenedor.prevFrame();
        }else{
                this.controlador.__end.call(this);
        }
}

controlCabecera.prototype.__avanzar = function() {
        var current = parseInt(this.contenedor._currentframe);
        if(parseInt(this.contenedor.fin) != current &&
           current < this.contenedor._totalframes) {        
                this.contenedor.nextFrame();
        }else{
                this.controlador.__end.call(this);
        }        
}

controlCabecera.prototype.__end = function() {
        delete this.onEnterFrame;
        this.controlador.onStop.call(this.contenedor);
}