LogoLogo
  • Home
  • Projects
  • About
  • Contact

Random Letter Cycling

Devon O. · December 28, 2007 · Actionscript · 1 comments
2

It’s an old effect we’ve all seen before, but still seems popular these days. Here’s a little Actionscript 3 implementation:

The effect class: LetterCycler.as

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* Randomly cycles the letters/numbers of the message property passed to it in the constructor.
* @author Devon O.
*/        
 
package com.onebyonedesign.extras {        
 
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.TimerEvent;
    import flash.utils.Timer;        
 
    public class LetterCycler extends EventDispatcher {        
 
        private var _index:int;
        private var _str1:String;
        private var _str2:String;
        private var _str3:String;        
 
        private var _message:String;
        private var _currentText:String;        
 
        /**
         * currentText property        returns currently scrambled text. READ ONLY.
         */
        public function get currentText():String {
            return _currentText;
        }        
 
        /**
         * message property            the unscrambled message. READ / WRITE.
         */
        public function set message(msg):void {
            _message = msg;
        }        
 
        public function get message():String {
            return _message;
        }        
 
        /**
         *
         * @param    The original, unscrambled message.
         */
        public function LetterCycler(message:String = ""):void {
            _message = message;
        }        
 
        /**
         * Call this to begin scrambling text. Listen for events, Event.CHANGE and Event.COMPLETE to act accordingly.
         */
        public function cycle():void {
            _str1 = "";
            _str2 = "";
            _str3 = "";
            _index = 0;        
 
            var timer:Timer = new Timer(25, _message.length + 1);
            timer.addEventListener(TimerEvent.TIMER, cycleText);
            timer.addEventListener(TimerEvent.TIMER_COMPLETE, cycleComplete);
            timer.start();
        }        
 
        private function cycleText(te:TimerEvent):void {
            var index:int = te.currentTarget.currentCount - 1;
            _str1 = "";
            _str2 = _message.substr(0, index);
            _str3 = _message.substr(index);
            var len:int = _str3.length;
            for (var i:int = 0; i < len; i++) {
                _str1 += String.fromCharCode(randRange(48, 122));
            }
            _currentText = _str2 + _str1;
            dispatchEvent(new Event(Event.CHANGE));
        }        
 
        private function cycleComplete(te:TimerEvent):void {
            te.currentTarget.removeEventListener(TimerEvent.TIMER, cycleText);
            te.currentTarget.removeEventListener(TimerEvent.TIMER_COMPLETE, cycleComplete);
            dispatchEvent(new Event(Event.COMPLETE));
        }        
 
        private function randRange(min:Number, max:Number):int {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
    }
}

And a quick document class example:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/** * Use as document class for an example of LetterCycler class.          
 
*/          
 
package {    import com.onebyonedesign.extras.LetterCycler;          
 
    import flash.display.Sprite;          
 
    import flash.events.Event;          
 
    import flash.events.TimerEvent;          
 
    import flash.text.TextField;          
 
    import flash.text.TextFieldAutoSize;          
 
    import flash.text.TextFormat;          
 
    import flash.utils.Timer;          
 
public class CycleExample extends Sprite {          
 
private var _textField:TextField;          
 
        private var _cycler:LetterCycler = new LetterCycler();          
 
        private var _messages:Array = new Array("This is some test text.", "Blah blah blah blah.", "The quick brown fox did something or other.", "Yadda yadda yadda yadda.");          
 
public function CycleExample():void {          
 
            init();          
 
        }          
 
private function init():void {          
 
            createTextField();          
 
            displayScrambledText(null);          
 
        }          
 
private function displayScrambledText(te:TimerEvent):void {          
 
            if (te != null) te.currentTarget.removeEventListener(TimerEvent.TIMER_COMPLETE, displayScrambledText);          
 
scrambleText(_messages[Math.floor(Math.random() * _messages.length)]);          
 
        }          
 
private function createTextField():void {          
 
            _textField = new TextField();          
 
            _textField.autoSize = TextFieldAutoSize.LEFT;          
 
            _textField.x = 50;          
 
            _textField.y = 50;          
 
            _textField.defaultTextFormat = new TextFormat("_typewriter", 12);          
 
            addChild(_textField);          
 
        }          
 
private function scrambleText(someText:String):void {          
 
            _cycler.message = someText;          
 
            _cycler.addEventListener(Event.CHANGE, showText);          
 
            _cycler.addEventListener(Event.COMPLETE, cycleDone);          
 
            _cycler.cycle();          
 
        }          
 
private function showText(evt:Event):void {          
 
            _textField.text = _cycler.currentText;          
 
        }          
 
private function cycleDone(evt:Event):void {          
 
            _cycler.removeEventListener(Event.CHANGE, showText);          
 
            _cycler.removeEventListener(Event.COMPLETE, cycleDone);          
 
var t:Timer = new Timer(2000, 1);          
 
            t.addEventListener(TimerEvent.TIMER_COMPLETE, displayScrambledText);          
 
            t.start();          
 
        }          
 
    }          
 
}

All that mumbo jumbo will give the example below:

  Facebook   Pinterest   Twitter   Google+
  • UV Scrolling in Starling
    May 07, 2012 · 5 comments
    4882
    14
    Read more
  • Updates to fPlayer
    February 03, 2008 · 0 comments
    1562
    4
    Read more
  • Update to Website Generation Tool
    May 03, 2009 · 7 comments
    2245
    2
    Read more
1 Comments:

Sorry, the comment form is closed at this time.

Devon O. Wolfgang

AIR | Unity3D | AR/VR

Unity Certified Developer

Technical Reviewer of “The Essential Guide to Flash CS4 AIR Development” and “Starling Game Development Essentials”

Reviewer of “The Starling Handbook”

Unity Engineer at Touch Press.

Categories
  • Actionscript (95)
  • AIR (16)
  • Flash (99)
  • Games (7)
  • Liberty (13)
  • Life (53)
  • Shaders (20)
  • Unity3D (21)
Recent Comments
  • MainDepth on Unity Ripple or Shock Wave Effect
  • Devon O. on Unity Ripple or Shock Wave Effect
  • Feral_Pug on Unity Ripple or Shock Wave Effect
  • bavvireal on Unity3D Endless Runner Part I – Curved Worlds
  • Danielius Vargonas on Custom Post Processing with the LWRP
Archives
  • December 2020 (1)
  • December 2019 (1)
  • September 2019 (1)
  • February 2019 (2)
  • December 2018 (1)
  • July 2018 (1)
  • June 2018 (1)
  • May 2018 (2)
  • January 2018 (1)
  • December 2017 (2)
  • October 2017 (1)
  • September 2017 (2)
  • January 2017 (1)
  • July 2016 (1)
  • December 2015 (2)
  • March 2015 (1)
  • September 2014 (1)
  • January 2014 (1)
  • August 2013 (1)
  • July 2013 (1)
  • May 2013 (1)
  • March 2013 (2)
  • December 2012 (1)
  • November 2012 (1)
  • September 2012 (3)
  • June 2012 (2)
  • May 2012 (1)
  • April 2012 (1)
  • December 2011 (2)
  • October 2011 (3)
  • September 2011 (1)
  • August 2011 (1)
  • July 2011 (1)
  • May 2011 (2)
  • April 2011 (2)
  • March 2011 (1)
  • February 2011 (1)
  • January 2011 (2)
  • December 2010 (3)
  • October 2010 (5)
  • September 2010 (1)
  • July 2010 (2)
  • May 2010 (5)
  • April 2010 (2)
  • March 2010 (7)
  • February 2010 (5)
  • January 2010 (5)
  • December 2009 (3)
  • November 2009 (1)
  • October 2009 (5)
  • September 2009 (5)
  • August 2009 (1)
  • July 2009 (1)
  • June 2009 (2)
  • May 2009 (6)
  • April 2009 (4)
  • March 2009 (2)
  • February 2009 (4)
  • January 2009 (1)
  • December 2008 (5)
  • November 2008 (2)
  • September 2008 (1)
  • August 2008 (6)
  • July 2008 (6)
  • June 2008 (9)
  • May 2008 (4)
  • April 2008 (3)
  • March 2008 (4)
  • February 2008 (9)
  • January 2008 (7)
  • December 2007 (6)
Copyright © 2021 Devon O. Wolfgang