codice:
/*
# Classe MagicText AS3
# date: 30-10-09
# author: Alesssandro Pomili
# copyright: Alessandro Pomili
*/
package
{
import flash.display.*;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.geom.Rectangle;
public class MagicText extends MovieClip
{
private var __target:DisplayObjectContainer; //il parent della casella di testo passata
private var __formato:TextFormat; //il textformat del testo passato
private var __stringa:String; //la stringa letta nella textfield
private var __conta:Number; //contatore per le lettere
private var __textfield:TextField; //riferimento
private var __MagicText:MovieClip; // il clip che contiene tutto il testo
private var __arrayParole:Array; // array contentente le parole
private var __arrayLettere:Array; // array contentente tutte le lettere
private var __rimuovi:Boolean
function MagicText(textfield:TextField=null, rimuovi:Boolean=false){
if (textfield==null){
trace("la textfield passata alla class MagicText è vuota")
}else{
__conta=0;
__arrayParole = new Array();
__arrayLettere = new Array();
__rimuovi = rimuovi;
__textfield = textfield;
__target = textfield.parent; // il parent della mia textfield
__MagicText = new MovieClip();
__MagicText.x = textfield.x;
__MagicText.y = textfield.y;
//textfield.visible=false; //nascondo la textfield originale
if (rimuovi){
__target.removeChild(textfield)
}
__target.addChild(__MagicText);
__formato = textfield.getTextFormat();
__stringa = textfield.text.split("\r").join(" "); //sostituisco gli a capo con uno spazio vuoto
__stringa = __stringa.split(" ").join(" "); //sostituisco il doppio spazio vuoto lasciato dagli a capo con uno solo
var arrParole:Array = __stringa.split(" "); //splitto sugli spazi per ottenere le parole
for (var i=0;i<arrParole.length;i++){
var parola:MovieClip = new MovieClip()
parola.name="p"+i
parola.lettere = new Array();
for (var j=0;j<arrParole[i].length;j++){
var frame:Rectangle = textfield.getCharBoundaries(__conta);
//salvo la posizione della prima lettere della parola
if (j==0){
var inizioFraseX = frame.x;
var inizioFraseY = frame.y;
}
/*
//verifica area lettere
var rett:Sprite = new Sprite()
rett.graphics.clear();
rett.graphics.lineStyle(1)
rett.graphics.beginFill(0xFFFF00, .5);
rett.graphics.drawRect((frame.x)+textfield.x, (frame.y)+textfield.y, frame.width, frame.height);
rett.graphics.endFill();
rett.alpha=.3
__target.addChild(rett)
*/
var cLett:MovieClip = new MovieClip()
var tt:TextField = new TextField();
tt.autoSize="left";
tt.selectable = false;
tt.embedFonts=true
tt.text = textfield.text.substr(__conta,1);
tt.setTextFormat(__formato);
tt.x = -tt.width/2;
tt.y = -tt.height/2;
tt.name= "l"+j;
cLett.addChild(tt);
cLett.x = frame.x-tt.x-inizioFraseX;
cLett.y = frame.y-tt.y-inizioFraseY;
parola.addChild(cLett);
__conta++;
parola.lettere.push(cLett);
__arrayLettere.push(cLett);
}
//sposto l'origine della parola in modo da averla al centro
var offx = parola.width/2; //calcolo il centro della parola
var offy = parola.height/2;
//sposto tutte le lettere al centro
for (var z:Number=0;z<parola.lettere.length;z++){
parola.lettere[z].x -= offx;
parola.lettere[z].y -= offy;
}
//sposto l'intera parola per recuperare lo spostamento delle lettere
parola.x += offx+inizioFraseX;
parola.y += offy+inizioFraseY;
__MagicText.addChild(parola);
__arrayParole.push(parola);
__conta++;
if (textfield.text.substr(__conta,1)=="\r"){ //se questo carattere corrisponde ad un a capo lo salto
__conta++;
}
}
}
}
/*
public function get parole():Array {
return __arrayParole;
}
public function get lettere():Array {
return __arrayLettere;
}
*/
public function getParole():Array {
return __arrayParole;
}
public function getLettere():Array{
return __arrayLettere;
}
public function getLettereParola(parola:MovieClip=null):Array{
if (parola==null){
return new Array();
}else{
return parola.lettere;
}
}
public function showText(){
__textfield.visible=true
if (__rimuovi){
__target.addChild(__textfield)
}
}
public function hideText(){
__textfield.visible=false
if (__rimuovi){
__target.removeChild(__textfield)
}
}
}
}
Utilizzo
codice:
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
TweenPlugin.activate([BlurFilterPlugin]);
OverwriteManager.init();
var magica = new MagicText(testo, true) // testo è una casella di testo sullo stage
var parole:Array = magica.getParole()
var lettere:Array = magica.getLettere();
for (var i=0;i<parole.length;i++){
TweenLite.from(parole[i], .5, {alpha:0,scaleX:1.5, scaleY:1.5, rotation:"-30", delay:i*.2})
var lettereParola:Array = magica.getLettereParola(parole[i])
/*for (var j=0;j<lettereParola.length;j++){
TweenLite.from(lettereParola[j], .5, {scaleY:2.5, delay:j*.05+i*.2})
}*/
}
for (i=0;i<lettere.length;i++){
//TweenLite.from(lettere[i], .1, {alpha:0, scaleY:2.5, delay:i*.05})
TweenLite.from(lettere[i], 2, {alpha:0, x:"+100", scaleY:2.5, delay:i*.05, blurFilter:{blurX:20}, rotation:50, ease:Elastic.easeOut})
}
}