Tag Archives: Flashlite1.1

今回から数回に分けて、FlashLite1.1ADVゲームを作成する方法を解説します。
もし「こんなやり方もあるよ!」とか「こうやった方が効率いいよ!」などの情報がございましたら、どしどしコメントいただければと存じます。

さて、初回の記事は、タイプライター風に1文字ずつ文字を表示させる方法についてです。ADVゲームには欠かせない演出です。

ADVゲームは主に4つのシーンに分けられると思います。
①初期化
②データのセット
③テキスト表示中
④クリック待ち
の4つです。さっそく、ステージに4つ分フレームを挿入して、それぞれのフレームにラベルをつけましょう。

1フレーム目から順番に、「init」「set」「run」「wait」というラベルをつけました。
さて、ここからActionScriptをガシガシ打ち込んでいきますよ。

○初期化

例えば、
「こんにちは」
「僕の名前は『竜』だ。江戸城の診療所で医師をしている。」
「よろしく頼む。」
という3つのテキストをゲーム中に表示したいとします。
さらに、この3つの文章が
script_data = “こんにちは,僕の名前は『竜』だ。江戸城の診療所で医師をしている。,よろしく頼む。”;
という感じでscript_dataという変数に「,」区切りで格納されていると仮定してください。

これを順番に表示するためには、「,」の位置を判別して配列風にテキストを変数でもたないといけません。
FlashLite1.1には配列のArray()クラスが存在しないので、asレイヤーの1フレーム目に下記のように記述してそれを実現します。

[cc lang="ActionScript"]
//文章
script_data = “こんにちは,僕の名前は『竜』だ。江戸城の診療所で医師をしている。,よろしく頼む。”;

//分解
script_data = script_data add “,”;
script_data_length = length(script_data);
nowCnt = 0;
for (i = 1; i <= script_data_length; i++) {
nowTxt = substring(script_data, i, 1);
if (nowTxt eq “,”) {
cntNum++;
eval(“script_” add cntNum) = substring(script_data, (nowCnt+1), (i-1-nowCnt));
nowCnt = i;
}
}

//添え字管理
now_script_num = 0;
[/cc]

この「now_script_num」については後ほど出てくるので今は置いておいてください。
こう記述するとどうなるかというと、trace(script_1)とかで確かめればわかるんですけど、script_1、script_2、script_3という変数にそれぞれ”こんにちは”、”僕の名前は『竜』だ。江戸城の診療所で医師をしている。”、”よろしく頼む。”という文字列が格納されます。

 

○データのセット

それでは、初期化が終わったのでasレイヤーの2フレーム目の処理を書いていきましょう。
ここでは実際に画面に表示するためのデータをセットしています。
[cc lang="ActionScript"]
//スクリプトを進める
now_script_num++;
script_now = eval(“script_” add now_script_num);

//テキスト格納
msg_text = script_now;

//文字列の長さ
msg_len = mblength(msg_text);
//表示
tellTarget (“/mc_msg”) {
gotoAndPlay(“init”);
}

//シナリオ表示中へ
gotoAndStop(“run”);
[/cc]
このように、表示するテキスト、文字列の長さをセットしてrunフレームに進んでいるわけです。
さて、「mc_msg」というシンボルはまだ登場していませんが、これもいったん置いておきましょう。後で作ります。
先に3フレーム目、4フレーム目のasを入力します。

 

○テキスト表示中

3フレーム目と4フレーム目は簡単。特にasで処理するものはないので、単純にstopしているだけです。

[cc lang="ActionScript"]

//テキスト表示
stop();

[/cc]

○クリック待ち

[cc lang="ActionScript"]

//テキスト表示終わってボタン押し待ち中
stop();

[/cc]

 

さて、これでシーンの構成は終わりました。
次回は実際にメッセージを表示させましょう。