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

テキストフィールドに一文字ずつ表示

求む、山の画像
Get Adobe Flash player
by Tamotsu.Sennen 24 Aug 2011
/**
 * Copyright Tamotsu.Sennen ( http://wonderfl.net/user/Tamotsu.Sennen )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/lOOB
 */

package {
    import flash.net.URLRequest;
    import flash.system.LoaderContext;
    import flash.display.*;
    import flash.text.*;
    import flash.display.Sprite;
    import flash.events.*;
    
    public class Main extends Sprite {
        public function Main() {
           // 山の画像をいれたい
           /*var url:String = "http://wonderfl.net/static/tmp/related_images/209917f871aa6df947c3a911726dd5f6542fbc1cm";
           var loader:Loader = new Loader();
           loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
           loader.load(new URLRequest(url), new LoaderContext(true));
           addChild(loader);*/
           
           // 背景色
           var bg_shape:Shape = new Shape();
           bg_shape.graphics.beginFill(0xddaa00);
           bg_shape.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
           addChildAt(bg_shape,0);
           
           // こっちが本編
           onLoad();
        }
        
        private function onLoad():void {
           var a:String = "このまわりはやまばかりだ、なにがおこったんだろうか。一息つきたいところだが、そうも言ってはいられない。どこに何があるのか?持ってきた食料は?のどもすごくかわいている。何が何だかわからない!でもまあいいかと思える自分の脳天気さにすこし喜びを感じる。だが、死ぬかもしれない!ああ、俺は不安定になっている。俺は不安定になっている。さて、これからなにをしよう。あたらしい今日がはじまる…";
            
            // テキストのフォーマット
            var fmt:TextFormat = new TextFormat();
            fmt.size = 14;
            fmt.font = "_等幅"; //なんで等幅フォントにならんのよ
            fmt.leading = 4;
            fmt.leftMargin = 7;
            fmt.rightMargin = 7;
            
            // テキストフィールドのフォーマット
            var x:TextField = new TextField();
            x.multiline = true;
            x.wordWrap = true;
            x.defaultTextFormat = fmt;
            x.width = 410;
            x.height = 65;
            x.x = (stage.stageWidth - x.width) / 2;
            x.y = (stage.stageHeight - x.height) / 1.5;
            x.background = true;
            x.backgroundColor = 0xf0f0f0;
            x.borderColor = 0x000000;
            
            // テキストフィールドを配置&管理するMC
            var box:MovieClip = new TextBox(x);
            box.text = a;
            box.speed = 100;
            addChild(box);
            
            // キックします
            box.start();
        }
    }
}

import flash.utils.Timer;
import flash.text.TextFormat;
import flash.text.TextField;
import flash.display.*;
import flash.events.*;

class TextBox extends MovieClip {
    
    private var field:TextField;
    private var _text:Array;
    private var _speed:int = 10;
    private var charLength:int = 0;
    private var charPointer:int = 0;
    private var textWidthPointer:int = 0;
    
    public function TextBox(f:TextField):void {
        field = f;
        addChild(field);
    }
    
    public function set text(t:String):void {
        _text = t.split("");
        charLength = _text.length;
    }
    
    public function set speed(msec:int):void {
        _speed = msec;
    }
    
    public function start():void {
        // タイマーで表示間隔を調整
        var myTimer:Timer = new Timer(_speed, charLength);
        myTimer.addEventListener(TimerEvent.TIMER, kick);
        myTimer.start();
    }
    
    private function kick(e:TimerEvent):void {
        // 文字がなくなるまでTimerの間隔で実行されつづける
        if(_text[charPointer]) {
            field.scrollV = int(charPointer / 27) + 1;
            field.appendText(_text[charPointer]);
            charPointer++;
        } else {
            e.target.removeEventListener(TimerEvent.TIMER, kick);
        }
    }
}

var trace:Function = Wonderfl.log;