In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

animateTextFieldクラスのテスト

カスタムクラスanimateTextFieldを作ってみました。
TextFieldクラスにendStrプロパティとrandomプロパティとtimeプロパティを足して
アニメーション後にCOMPイベントをディスパッチするようにしただけです。
果たして使う機会があるのかどうか・・・
Get Adobe Flash player
by meat18 28 Mar 2010
/*
カスタムクラス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);
    }
}