Afficher un texte, caractère par caractère

Posted on 05/08/2008 · Posted in Flash

Dernièrement, on m’a posé la question suivante :
“Comment faire, pour afficher un bloc de texte de manière progressive, un peu comme un texte tapé sur une machine par un homme.”

Le premier bout de code ajoute une lettre du texte toute les 100 ms.
Tandis que le deuxième bout de code, qui est une extension du premier, ajoute les lettres avec un délai compris entre 100 et 300 ms, cela produit un effet d’hésitation qui rend la chose plus “humaine”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import flash.utils.Timer;
import flash.events.TimerEvent;

var unString : String = "Legi, Patres colendissimi, in Arabum monumentis, interrogatum Abdalam 1 Sarracenum, quid in hac quasi mundana scaena admirandum maxime spectaretur, nihil spectari homine admirabilius respondisse. Cui sententiae illud Mercurii adstipulatur";

var unTextField : TextField = new TextField ();
var delaiFrappe : int = 100;
var unTimer : Timer = new Timer (delaiFrappe, unString.length);

unTextField.width = 200;
unTextField.height = 200;
unTextField.wordWrap = true;
addChild (unTextField);
unTimer.addEventListener(TimerEvent.TIMER, onTimer);
unTimer.start ();

function onTimer (ev: TimerEvent) : void
{
   unTextField.text = unTextField.text.concat (unString.charAt(ev.target.currentCount));
}

Deuxième bout de code, on modifie juste le délai du Timer de manière aléatoire, avec un chiffre égale à 100, 200 ou 300.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import flash.utils.Timer;
import flash.events.TimerEvent;

var unString : String = "Legi, Patres colendissimi, in Arabum monumentis, interrogatum Abdalam 1 Sarracenum, quid in hac quasi mundana scaena admirandum maxime spectaretur, nihil spectari homine admirabilius respondisse. Cui sententiae illud Mercurii adstipulatur";

var unTextField : TextField = new TextField ();
var delaiFrappe : int = 100;
var unTimer : Timer = new Timer (delaiFrappe, unString.length);

unTextField.width = 200;
unTextField.height = 200;
unTextField.wordWrap = true;
addChild (unTextField);
unTimer.addEventListener(TimerEvent.TIMER, onTimer);
unTimer.start ();

function onTimer (ev: TimerEvent) : void
{
ev.target.delay = ((Math.random() * 2) + 1) * delaiFrappe;
unTextField.text = unTextField.text.concat (unString.charAt(ev.target.currentCount));
}