Comunidad de diseño web y desarrollo en internet online

Clase de ActionScript 2 para crear una marquesina animada

Hace un tiempo creé un prototype para escribir un texto en forma aleatoria con actionscript, el cual fue mejorado por penHolder al crear una clase para lograr el mismo objetivo, entonces para seguir el trabajo con cadenas de texto e inspirado en el post de un usuario del foro, decidí crear esta clase con la cual se puede lograr un efecto de marquesina usando para ello Actionscript 2. Al igual que el anterior prototype, está sujeta a arreglos y optimizaciones, así que todos los que aporten algo para mejorarla serán bien recibidos.

Para usarla se debe tener copiada la siguiente clase dentro de un fichero "marquee.as" junto a nuestro fichero flash:

Código :

class marquee{

private var _campo:TextField;
private var _texto:String;
private var _speed:Number;
private var _intervalo:Number;

private var _inc:Number;
private var _pos:Number;
private var _chars:Number;
private var _str:String;
private var _swap:Boolean;

private var _formatoL:TextFormat;
private var _formatoR:TextFormat;

//---Función constructora
public function marquee(campo:TextField, texto:String, speed:Number){

_texto = texto;
_speed = speed;
_campo = campo;
_campo.multiline = false;
_campo.wordWrap = false;

//---Formatos
_formatoL = new TextFormat();
_formatoR = new TextFormat();
_formatoL.align = "left";
_formatoR.align = "right";

//---Comprobar si el texto es mayor que el campo
_campo.text = _texto;
var sc:Boolean = (_campo.maxhscroll > 0) ? true : false;
_campo.text = "";

//---Scrollear o dejar intacto
if(sc){

//---Poner la alineación en la derecha al inicio
_campo.setNewTextFormat(_formatoR);

_inc = 0;
_pos = 1;
_chars = _texto.length;
_swap = false;

//---Ejecutar la función por tiempo
start();

}else{

//---Situar el texto fijo
_campo.text = _texto;

}

}

//---Función de scrollear la marquesina
private function scrollMarquee():Void{

_str = _texto.slice(_inc, _pos);

//---Si el último caracter es un espacio
if(!_swap && _str.slice(_str.length - 1, _str.length) == " "){

_pos++;
_str = _texto.slice(_inc, _pos);

}

//---Asignar el string al campo de texto
_campo.text = _str;

//---Incrementar los indexs
if(_pos < _chars){ _pos++; }

if(_swap){ _inc++; }

//---De acabarse el campo de texto, volver a empezar
if(_inc >= _chars){

_inc = 0;
_pos = 1;
_swap = false;
_campo.setNewTextFormat(_formatoR);

}

//---Cambiar de derecha a izquierda
if(_campo.maxhscroll > 0 && !_swap){

_campo.text = _texto.slice(_inc + 1, _pos);
_campo.setNewTextFormat(_formatoL);
_swap = true;

}

}

//---Función para detener la marquesina
public function stop():Void{

clearInterval(_intervalo);

}

//---Función para comenzar la marquesina
public function start():Void{

_intervalo = setInterval(this, "scrollMarquee", _speed);

}

}


Su construcción y métodos es bastante sencilla:

Función Constructora


Código :

public marquesina(campo:TextField, frase:String, velocidad:Number);

  • campo: Instancia de campo de texto dinámico en el que desea crear la marquesina.
  • frase: Cadena de texto que se va a utilizar en la marquesina.
  • velocidad Rapidez conque el texto se va a desplazar expresada en milisegundos.

Métodos


start() Comienza a hacer funcionar la marquesina (la función constructora llama a este método automáticamente)
stop() Detiene la marquesina

Veamos un ejemplo concreto, creemos un documento de 30fps, situar junto al FLA el fichero "marquee.as", crear un textfield dinámico con nombre de instancia "myText", después situar en el mismo frame donde se encuentra el textfield lo siguiente:

Código :

var marquesina:marquee = new marquee(myText, "Clase para simular una marquesina en ActionScript 2", 80);


Si quisiéramos detener la marquesina pondríamos:

Código :

marquesina.stop();

Si quisiéramos hecharla a andar nuevamente pondríamos:

Código :

marquesina.start();


Aquí tienen un ejemplo:



Saludos y espero que les sea de ayuda.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate