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.
Por musika el 10 de Febrero de 2009
Por Sergio Paños el 18 de Febrero de 2009
He probado a colocarlo en distintas capas, por si hay incompativilidad con las funciones que ya tengo en el fotograma, os las facilito a continuación por si veis algo raro...
var marquesina:marquee = new marquee(myText, "Clase para simular una marquesina en ActionScript 2", 80);
loadMovieNum("boton.swf",200);
mc = _root.createEmptyMovieClip("inicial",200);
mc.nivel=200;
mc.onEnterFrame = function()
{
cargados= eval("_level"+this.nivel).getBytesLoaded();
totales = eval("_level"+this.nivel).getBytesTotal();
if (cargados == totales && totales>0)
{
eval("_level"+this.nivel)._x=20;
eval("_level"+this.nivel)._y=120;
this.removeMovieClip();
}
}
loadMovieNum("inicio.swf",99);
mc = _root.createEmptyMovieClip("inicial",99);
mc.nivel=99;
mc.onEnterFrame = function()
{
cargados= eval("_level"+this.nivel).getBytesLoaded();
totales = eval("_level"+this.nivel).getBytesTotal();
if (cargados == totales && totales>0)
{
eval("_level"+this.nivel)._x=20;
eval("_level"+this.nivel)._y=0;
this.removeMovieClip();
}
}
Gracias previamente! Un saludo
Por ejemplo, que de principio muestre "canción 1", que al pulsar un boton muestre "canción 2"y así según vaya pulsando diferentes botones vaya cambiando el texto.
Código :
Y aquí tienes un ejemplo, en la escena está el campo de texto "myText" y dos MovieClips "boton1" y "botón2", en el primer frame tendrías un código como el siguiente:
Código :
Al presionar los botones el texto de la marquesina cambiará.
Código :
Y aquí tienes un ejemplo, en la escena está el campo de texto "myText" y dos MovieClips "boton1" y "botón2", en el primer frame tendrías un código como el siguiente:
Código :
Al presionar los botones el texto de la marquesina cambiará.
Por marce el 29 de Octubre de 2009
quisiera saber como hacerle con action script
Por widson el 28 de Noviembre de 2009
Por widson el 28 de Noviembre de 2009
Por Klorp el 11 de Diciembre de 2009
Gracias
Por merlin1989 el 02 de Enero de 2010
Por merlin1989 el 02 de Enero de 2010
Por juan pablo el 02 de Febrero de 2010
Por Damned el 10 de Junio de 2010
PD: muchisimas gracias me ha servido... esperando respuesta
Por Mike el 23 de Septiembre de 2010
Por edicson el 01 de Abril de 2011