codice:
function charPositions(tFormat, str, depth) {
	_root.createTextField("temp", depth, 0, -300, 100, 400);
	temp.autosize = true;
	temp.embedFonts = true;
	temp.setNewTextFormat(tFormat);
	var arr = [];
	temp.text = str;
	var totalWidth = temp.textWidth;
	for (var i = 0; i<str.length; i++) {
		temp.text = str.substr(i);
		arr[i] = totalWidth-temp.textWidth;
	}
	return arr;
}
function setUpText(str, forma, lineLength) {
	var positions = charPositions(forma, str, 2000);
	var currentLine;
	var lineHeight = forma.getTextExtent(str).height;
	var finalPositions = [];
	for (var i = 0; i<positions.length; i++) {
		if (positions[i]>(lineLength+subtracta)) {
			subtracta = positions[i];
			currentLine++;
		}
		var x = positions[i]-subtracta;
		var y = lineHeight*currentLine;
		finalPositions[i] = {char:str.charAt(i), x:x, y:y};
	}
	return finalPositions;
}
function drawNext() {
	var noo = this.createEmptyMovieClip("lett"+this.count, this.count);
	var nextObj = charPos[this.count];
	noo._x = nextObj.x;
	noo._y = nextObj.y;
	noo.createTextField("tex", 1, 0, 0, 100, 100);
	noo.tex.text = nextObj.char;
	noo.tex.embedFonts = true;
	noo.tex.selectable = false;
	noo.tex.setTextFormat(mt);
	noo._alpha = 30;
	noo.onEnterFrame = function() {
		this._alpha += 5;
		if (this._alpha>=500) {
			this.onEnterFrame = function() {
				if (this._alpha>=0) {
					this._alpha -= 5;
				} else if (this._alpha<0) {
					delete this.onEnterFrame;
					// se questo era l'ultimo movieclip,
					// e siamo arrivati alla fine dell'animazione
					// stabiliamo che tra 2 secondi verrà richiamata
					// la funzione "Init" sulla root, passando i tre
					// parametri iniziali
					if(this.last){
						_root.interval = setInterval(_root, "init", 2000, _root.str, _root.mt, 520);
					}
					this.removeMovieClip();
				}
			};
		}
	};
	this.count++;
	if (this.count>charPos.length) {
		// se questo è l'ultimo movieclip della serie
		// settiamo la variabile "last" come vera
		noo.last = true;
		delete this.onEnterFrame;
	}
}
function init(str, tForm, lineLength) {
	// resettiamo la variabile "subtracta"
	// per poter reiniziare il ciclo
	delete subtracta;
	// rimuoviamo il campo di testo
	temp.removeTextField();
	// resettiamo l'intervallo di 2 secondi
	clearInterval(interval);
	charPos = setUpText(str, tForm, lineLength);
	this.count = 0;
	this.onEnterFrame = drawNext;
}
mt = new TextFormat();
mt.font = "Arial";
mt.size = 26;
mt.color = 0xffffff;
mt.bold = true;
str = "cosa hai da guardare!? sono troppo bello!          scherzi a parte spero che vi possa                       piacere questo effetto!";
init(str, mt, 520);
stop();