animateTextFieldクラスのテスト
カスタムクラスanimateTextFieldを作ってみました。
TextFieldクラスにendStrプロパティとrandomプロパティとtimeプロパティを足して
アニメーション後にCOMPイベントをディスパッチするようにしただけです。
果たして使う機会があるのかどうか・・・
/*
カスタムクラスanimateTextFieldを作ってみました。
TextFieldクラスにendStrプロパティとrandomプロパティとtimeプロパティを足して
アニメーション後にCOMPイベントをディスパッチするようにしただけです。
果たして使う機会があるのかどうか・・・
*/
package {
import flash.display.Sprite;
import flash.events.*;
import flash.text.*;
public class FlashTest extends Sprite {
public function FlashTest() {
var format:TextFormat = new TextFormat();
format.font = "Courier New";
var testATF:animateTextField = new animateTextField();
testATF.defaultTextFormat = format;
//最初に表示されるテキスト(デフォルトは"")
testATF.text = "animateTextFieldクラスのテスト";
//最後に表示されるテキスト(デフォルトは"")
testATF.endStr = "testtesttest";
testATF.autoSize = "left";
addChild(testATF);
//2つめのanimateTextField
//今度はイベントをディスパッチしてみる
var testATF2:animateTextField = new animateTextField();
testATF2.defaultTextFormat = format;
testATF2.text = "animateTextFieldクラスのテスト";
testATF2.endStr = "testtesttest";
testATF2.autoSize = "left";
addChild(testATF2);
testATF2.y = 20;
//ひととおり文字の変化が終わるとatfEventがCOMPを配信します。
testATF2.addEventListener(atfEvent.COMP,evtest);
//3つめのanimateTextField
//今度はランダムをオンにしてみる
var testATF3:animateTextField = new animateTextField();
testATF3.defaultTextFormat = format;
testATF3.text = "animateTextFieldクラスのテスト";
testATF3.endStr = "random type A";
testATF3.autoSize = "left";
addChild(testATF3);
testATF3.y = 40;
//プロパティ"random"をtrueにするとランダムエフェクトが発生します
testATF3.random = true;
//4つめのanimateTextField
//インスタンス生成時にパラメータを渡す
var testATF4:animateTextField = new animateTextField("random type A",2,true,"a");
testATF4.defaultTextFormat = format;
testATF4.text = "animateTextFieldクラスのテスト";
testATF4.autoSize = "left";
addChild(testATF4);
testATF4.y = 60;
//5つめのanimateTextField
//異なるパターンのランダムテキスト
var testATF5:animateTextField = new animateTextField("ランダムテキストBタイプのテストです。",0.5,true,"b");
testATF5.defaultTextFormat = format;
testATF5.autoSize = "left";
addChild(testATF5);
testATF5.y = 80;
//6つめのanimateTextField
//ランダムテキストのパターンを変更
var testATF6:animateTextField = new animateTextField("random type B",1,true);
testATF6.defaultTextFormat = format;
testATF6.rType = "b";
testATF6.text = "animateTextFieldクラスのテスト";
testATF6.autoSize = "left";
addChild(testATF6);
testATF6.y = 100;
//7つめのanimateTextField
//ランダムテキストのパターンを変更
var testATF7:animateTextField = new animateTextField("random type C random type C random type C",1.5,true);
testATF7.defaultTextFormat = format;
testATF7.rType = "c";
testATF7.text = "animateTextField class test";
testATF7.autoSize = "left";
addChild(testATF7);
testATF7.y = 120;
//8つめのanimateTextField
//ランダムテキストのパターンを変更
var testATF8:animateTextField = new animateTextField("animateTextField random type D test",1.5,true);
testATF8.defaultTextFormat = format;
testATF8.rType = "d";
testATF8.text = "";
testATF8.autoSize = "left";
addChild(testATF8);
testATF8.y = 140;
stage.addEventListener(MouseEvent.CLICK,clicked);
var tf:TextField = TextField(addChild(new TextField()));
tf.y=180;
tf.autoSize = "left";
tf.text = "クリックでスタート";
function clicked(e:Event):void
{
testATF.text = "animateTextFieldクラスのテスト";
testATF2.text = "animateTextFieldクラスのテスト";
testATF2.endStr = "testtesttest";
testATF3.text = "animateTextFieldクラスのテスト";
testATF4.text = "animateTextFieldクラスのテスト";
testATF5.text = "";
testATF6.text = "animateTextFieldクラスのテスト";
testATF7.text = "animateTextField class test";
testATF8.text = "";
testATF2.addEventListener(atfEvent.COMP,evtest);
//start()メソッドでアニメーション開始
testATF.start();
testATF2.start();
testATF3.start();
testATF4.start();
testATF5.start();
testATF6.start();
testATF7.start();
testATF8.start();
}
function evtest(e:atfEvent):void
{
e.target.endStr = "event dispatched";
e.target.start();
e.target.removeEventListener(atfEvent.COMP,evtest);
}
}
}
}
//カスタムクラス"animateTextField"
import flash.display.*;
import flash.events.Event;
import flash.text.TextField;
import caurina.transitions.Tweener;
import caurina.transitions.properties.*;
class animateTextField extends TextField {
private var sourceTxt:String = "_/-=+%&$#!?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
public var endStr:String;
public var time:Number;
public var random:Boolean = false;
public var rType:String = "a";
public var pLength:int;
public function animateTextField(eS:String = "",t:Number = 0.8,r:Boolean = false,rt:String = "a")
{
TextShortcuts.init();
endStr = eS;
time = t;
random = r;
rType = rt;
}
public function start():void
{
if(rType == "c")
{
pLength = text.length-endStr.length;
}
if(rType == "d")
{
pLength = endStr.length/1.5;
}
Tweener.addTween(this,
{
onUpdate:rndText,
onUpdateParams:[this],
_text:endStr,
transition:"linear",
time:time,
onComplete:dEv,
pLength:0
});
}
private function rndText(a:animateTextField):void
{
if(this.random == true && a.text != endStr)
{
var Length:int;
if(this.rType == "a")
{
Length= a.text.length;
a.text = "";
}
if(this.rType == "b")
{
Length = a.endStr.length - a.text.length;
}
if(this.rType == "c" || this.rType == "d")
{
Length = a.endStr.length - a.text.length + pLength;
}
for(var i:int=0;i<Length;i++)
{
a.appendText(sourceTxt.charAt(int(Math.random()*(sourceTxt.length-1))));
}
dispatchEvent(new atfEvent(atfEvent.UPDATE));
}
}
private function dEv():void
{
dispatchEvent(new atfEvent(atfEvent.COMP));
}
}
//カスタムイベント配信用クラス
import flash.events.*;
class atfEvent extends Event
{
public static const COMP:String = "comp";
public static const UPDATE:String = "update";
public function atfEvent(type:String)
{
super(type);
}
public override function clone():Event
{
return new atfEvent(type);
}
}