Comunidad de diseño web y desarrollo en internet

Clase para crear texto en forma aleatoria con Actionscript 3

Hace poco elchininet nos mostró un prototype para escribir un texto en forma aleatoria en Actionscript 2. En este tip vamos a ver como hacer lo mismo, pero con Actionscript 3.

Vamos a crear una clase que extienda de TextField donde crearemos la función createRandomText(); esta función está compuesta a su vez por un Timer y dos funciones. La funcion q crea y ejecuta el Timer esta seteada por la longitud de la cadena de texto; la funcion que ejecuta el timer lo que hace es ir construyendo un texto temporal tomando caracteres desde un array hasta ir armando el texto correcto, para ello tenemos la función rand() que la que evalúa la longitud y los espacios entre las palabras.


Debo decir que la optimización y corrección de detalles de la clase fueron salvados una vez mas gracias la inmensa sabiduría del Maestro Z :alabado:


Esto es lo que vamos a hacer:



Código :

package ph.display.text{
   //
   import flash.text.TextField;
   import flash.utils.Timer;
   import flash.events.Event;
   import flash.events.TimerEvent;
   //
   public class TextHolder extends TextField {
      //
      private var field:TextField;
      private var txt:String;
      private var currrentString:String;
      private var chars:String;
      private var charsArray:Array;
      private var timer:Timer;
      private var txtLength:uint;
      private var counter:uint;
      private var speed:uint;
      private var incress:uint;
      private var ignoreW:Boolean;
      //
      //public function TextHolder():void {}; // como el costructor está vacio no es imprescindible
      //
      public function createRandomText(_txt:String, _speed:uint = 20, _incress:uint = 1, ignoreWhite:Boolean = false):void {
         //
         txt = _txt;
         speed = _speed;
         incress = _incress;
         ignoreW = ignoreWhite;
         //
         field = this;
         txtLength = txt.length;
         counter = 0;
         //
         var chars:String = "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0 ! @ # $ % ^ & * ( ) { } < > / ?";
         charsArray = chars.split(" ");
         currrentString = new String();
         //
         doTimer();
      }
      //
      private function doTimer():void {
         //
         timer = new Timer(speed, txtLength);
         timer.addEventListener(TimerEvent.TIMER, incressment);
         timer.start();
      }
      //
      private function incressment(e:Event = null):void {
         //
         currrentString += txt.substr(counter, incress);
         counter += incress;
         field.text = (currrentString + rand(txtLength - counter));
      }
      //
      private function rand(t:uint):String {
         //
         var randomText:String = "";
         //
         for (var i:int = 0; i < t; i++) {
            //
            if (!ignoreW && txt.charAt(counter + i) == " ") {
               randomText += " ";
            } else {
               randomText += charsArray[uint(Math.random() * charsArray.length)];
            }
         }
         return randomText;
      }
      //
   }// class
}// package


Y en la clase Main:

Código :

package {
   //
   import flash.display.MovieClip;
   import flash.text.TextFieldAutoSize;
   import ph.display.text.TextHolder;
   //
   public class Main extends MovieClip {
      //
      private var randTxt:TextHolder;
      private var txtString:String;
      //
      public function Main() {
         //
         buildText();
      }
      //
      private function buildText():void {
         //
         txtString = "Lorem ipsum dolor sit amet.";
         //
         randTxt = new TextHolder();
         randTxt.createRandomText(txtString);
         randTxt.autoSize = TextFieldAutoSize.LEFT;
         //
         addChild(randTxt);
      }
      //
   }// class
}// package


Eso es todo, espero sirva ;)

¿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