/**
* Copyright chimad ( http://wonderfl.net/user/chimad )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/xJan
*/
package {
import flash.display.Sprite;
import flash.text.TextFormat;
public class Main extends Sprite {
public function Main() {
var format:TextFormat = new TextFormat("_typeWriter", 36, 0x0, true);
var animatedText:AnimatedText = new AnimatedText("Hello Wonderfl", format);
addChild(animatedText);
animatedText.x = (stage.stageWidth - animatedText.width) / 2;
animatedText.y = (stage.stageHeight - animatedText.height) / 2;
animatedText.play();
}
}
}
import flash.display.GradientType;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.text.TextField;
import flash.text.TextFormat;
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.easing.Back;
import org.libspark.betweenas3.tweens.ITween;
class AnimatedText extends Sprite {
public var text:String;
public var textFormat:TextFormat;
private var board:Sprite;
private var bg:Sprite;
private var bg2:Shape;
private var tween:ITween;
private var chars:Array;
public function AnimatedText(text:String, textFormat:TextFormat) {
this.text = text;
this.textFormat = textFormat;
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
private function addedToStage(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
// stageを参照したいので、ADDED_TO_STAGEイベントハンドラで初期化処理を行う
initChars();
initGradiationBox();
initTweens();
}
private function initChars():void {
board = new Sprite();
board.cacheAsBitmap = true;
chars = getChars(text);
for each (var char:* in chars) {
board.addChild(char);
}
addChild(board);
}
private function initGradiationBox():void {
var color:uint = uint(textFormat.color);
var matrix:Matrix = new Matrix();
matrix.createGradientBox(width, height, 10 * Math.PI / 180);
bg = new Sprite();
bg.graphics.beginGradientFill(GradientType.LINEAR, [color, 0xFFFFFF, color], [1.0, 1.0, 1.0], [0, 127, 255], matrix);
bg.graphics.drawRect(0, 0, width, height);
bg.graphics.endFill();
bg.cacheAsBitmap = true;
bg.visible = false;
var bg1:Shape = new Shape();
bg1.graphics.beginFill(color);
bg1.graphics.drawRect(0, 0, width, height);
bg1.graphics.endFill();
bg2 = new Shape();
bg2.graphics.beginGradientFill(GradientType.LINEAR, [color, 0xFFFFFF, color], [1.0, 1.0, 1.0], [0, 127, 255], matrix);
bg2.graphics.drawRect(0, 0, width, height);
bg2.graphics.endFill();
bg.addChild(bg1);
bg.addChild(bg2);
addChild(bg);
}
private function initTweens():void {
var delay:Number = 0;
var tweens:Array = [];
for each (var char:* in chars) {
tween = BetweenAS3.delay(BetweenAS3.tween(char, null, { y: -(stage.stageHeight / 2 + char.height) }, 1, Back.easeOut), delay);
tweens.push(tween);
delay += 0.2;
}
tween = BetweenAS3.parallelTweens(tweens);
var applyMaskTween:ITween = BetweenAS3.func(function():void {
bg.mask = board;
bg.visible = true;
} );
var detachMaskTween:ITween = BetweenAS3.func(function():void {
bg.mask = null;
bg.visible = false;
} );
var scrollTween:ITween = BetweenAS3.tween(bg2, { $x:bg2.width }, { $x: -bg2.width }, 2);
tween = BetweenAS3.delay(BetweenAS3.serial(tween, applyMaskTween, scrollTween, detachMaskTween), 0, 1);
tween.stopOnComplete = false;
}
public function play():void {
if (tween != null && !tween.isPlaying)
tween.play();
}
private function getChars(str:String):Array {
var array:Array = [];
var chars:Array = str.split("");
var width:Number = 0;
for (var i:int = 0; i < chars.length; i++) {
var tf:TextField = new TextField();
tf.defaultTextFormat = textFormat;
tf.text = chars[i];
tf.autoSize = "left";
tf.x = width;
array.push(tf);
width += tf.width;
}
return array;
}
}