スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | | スポンサー広告

一文字ずつ表示

テキストを一文字ずつ表示するサンプルです。タイプライター表示っていうんでしょうか。





上の欄に文章を入力して「表示」ボタンを押すと、その文章が下の欄に一文字ずつ表示されていきます。インターバル欄に数字を入れると文字を表示する時間間隔が変わります。

また、文章中に{数字}と入れるとその部分でインターバルを長くすることができます。{10}とかをそのまま出したいときは{{10}と書けばよいデス。

今回は、次に表示すべき文字を戻すIntervalStringクラスを作ってみました。

package {
/**
* 指定インターバル毎に文字を取り出せるクラス。
*/
public class IntervalString {
/** 元の文字列 */
private var _src:String;
/** インターバル */
private var _interval:int;
/** カウンタ */
private var _cnt:int = 0;
/** インデックス */
private var _index:uint = 0;
/**
* コンストラクタ。
* @param src 元の文字列
* @param interval 次の文字を取り出すのに必要なnext回数
*/
public function IntervalString(src:String, interval:int = 0) {
_src = src;
_interval = interval;
}
/**
* 次の文字を戻します。規定回数に達するまでは空文字を戻します。
*/
public function next():String {
// インターバル中ならカウンタを加算し、空文字を戻す。
if (_cnt < _interval) {
_cnt++;
return "";
}
// すべての文字を戻し終えていたらnullを戻す。
if (_index >= _src.length) {
return null;
}
// 元の文字列から次に戻す候補を取得する。
var c:String = _src.charAt(_index++);
// rはnに変換
if (c == "r") {
c = "n";
_cnt = 0;
return c;
}
// {が来たらインターバル指定の可能性があるので先読み
if (c == "{") {
var tmpIndex:uint = _index;
var tmpC:String;
var tmpVal:String = "";
// } がくるまで先読み
while ("}" != (tmpC = _src.charAt(tmpIndex++))) {
// {{のときは出力は{
if (tmpC == "{" &&
tmpVal == "") {
_cnt = 0;
_index = tmpIndex;
return tmpC;
}
// 数値でないなら{を戻し先読みはキャンセル。
// 数値なら値を保存し先読み続行。
if ("0123456789".indexOf(tmpC) < 0) {
_cnt = 0;
return c;
} else {
tmpVal += tmpC;
}
}
// {数字}で指定された分だけカウンタを戻す。
_cnt -= Number(tmpVal);
_index = tmpIndex;
return "";
}
// カウンタをリセットして文字を戻す。
_cnt = 0;
return c;
}
}
}
基本的にはコンストラクタで元の文字列を指定して、nextメソッドで一文字ずつ取り出すカッコウです。ただし、インターバルの分だけnextは空文字を戻します。これによって、同じ間隔(ENTER_FRAMEとか)でnextしてやるとインターバルが大きい方が文字表示が遅くなるという寸法デス。nextの中で先読みとかゴチャゴチャやっているのは{数字}パターンの処理デス。

そんでサンプルのフレームアクションの方はこんなカンジです。
// IntervalString変数。最初はundefined
var str:IntervalString;
// 表示ボタンのクリックイベントハンドラ
start_mc.addEventListener(MouseEvent.CLICK,
function(e:Event) {
// 出力をリセット
dest_txt.text = "";
// IntervalStringオブジェクトを生成
str = new IntervalString(src_txt.text, int(interval_txt.text));
});
// フレームアクション
addEventListener(Event.ENTER_FRAME,
function(e:Event) {
// IntervalStringが生成済みのときだけ処理する。
if (str) {
// 次の文字を取得し、出力先に追加
var c:String = str.next();
if (c != null) {
dest_txt.appendText(c);
} else {
// もう追加する文字がないときは変数をnullにして処理しない
str = null;
}
}
});
start_mcは「表示」ボタンです。クリックすると出力欄(dest_txt)をカラにして新たなIntervalStringオブジェクトを生成します。IntervalStringのコンストラクタで指定してるsrc_txtは入力欄、interval_txtはインターバル欄の値デス。

実際に一文字ずつ出力するのはENTER_FRAMEイベントハンドラでやってます。IntervalStringオブジェクトからnextで文字を取り出して、appendTextで出力欄に追加します。
スポンサーサイト

テーマ:Flash - ジャンル:コンピュータ

2007.08.26 | | Comments(0) | Trackback(0) | Flash CS3

コメント

コメントの投稿


秘密にする

«  | HOME |  »

プロフィール

HundredthMonkey

Author:HundredthMonkey
プログラマ。

ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文:

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。