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);
}
}
Código :
public marquesina(campo:TextField, frase:String, velocidad:Number);
Código :
var marquesina:marquee = new marquee(myText, "Clase para simular una marquesina en ActionScript 2", 80);
Código :
marquesina.stop();
Código :
marquesina.start();
flash
actionscript
animacion
poo
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;
}
}
//---Método para detener la marquesina
public function stop():Void {
clearInterval(_intervalo);
}
//---Método para comenzar la marquesina
public function start():Void {
_intervalo = setInterval(this, "scrollMarquee", _speed);
}
//---Propiedades del texto
public function get text():String{
return _texto;
}
public function set text(str:String):Void{
_texto = str;
_chars = _texto.length;
}
}
Código :
import marquee;
var marquesina:marquee = new marquee(myText, "Clase para simular una marquesina en ActionScript 2", 80);
boton1.onPress = function():Void{
marquesina.text = "Adición de propiedades de set y get del texto";
}
boton2.onPress = function():Void{
marquesina.text = "Automáticamente se remplazará el texto de la marquesina";
}
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;
}
}
//---Método para detener la marquesina
public function stop():Void {
clearInterval(_intervalo);
}
//---Método para comenzar la marquesina
public function start():Void {
_intervalo = setInterval(this, "scrollMarquee", _speed);
}
//---Propiedades del texto
public function get text():String{
return _texto;
}
public function set text(str:String):Void{
_texto = str;
_chars = _texto.length;
}
}
Código :
import marquee;
var marquesina:marquee = new marquee(myText, "Clase para simular una marquesina en ActionScript 2", 80);
boton1.onPress = function():Void{
marquesina.text = "Adición de propiedades de set y get del texto";
}
boton2.onPress = function():Void{
marquesina.text = "Automáticamente se remplazará el texto de la marquesina";
}