◆◆ LAST UPDATE 2004.04.08

■ 第九夜 画面を更新するよん♪

[MXNovel INDEX] [戻る] [次へ]

■ 第九夜 画面を更新するよん♪

エムノベファンの皆様、こんばんは。。MTL研究室の桜花です。
今週は、画面更新コマンド(update)について、ご説明いたします^^;
このコマンドは、画面にテキストや絵(CG)を描画したいタイミングで記述します。

実は・・・描画したいタイミングっていうのが、かなり重要です。。

いつものように?コマンド表を↓にまとめましたので、早速、ご覧ください。

■ update コマンド

項目 内容
分類 画面更新コマンド
MXNovel エンジン Ver 0.01
機能 画面を更新(再描画)します。
構文 update エフェクト名
パラメータ パラメータ1:  エフェクト名(省略可能)

・・・というより、今は、エフェクトをサポートしていないので、省略してください^^;
※ このパラメータは、画像(CG)を表示する時のエフェクト名として使う予定です。

このコマンドを使うことで、やっと、画面にテキストが出力されるわけですね。(ふーー。。。)

なんで、こんなに面倒なの?

っておしゃる方もいらっしゃると思いますが、
エムノベは行単位で解釈するインタプリータのため、このような仕様が最適と考えています。

なぜに???

回答いたします。
では、以下のようなケースを考えてみましょう。。

ケース1:■ 複数行のテキストを同時に表示する場合。

テキスト1
テキスト2
テキスト3
テキスト4
テキスト5

このような場合は、複数行をまとめて読み込み、画面の更新を1度だけにすると、
同時にテキストが出力できるわけです。

具体的な例では、こんなかんじになります。

font MS 明朝 30 00 b                      ; <== フォント指定
text "おはよう。。。桜花" 10 20  255 0   0   ; <== テキスト1
text "おはよう。。。桜花" 10 55  0   255 0   ; <== テキスト2
text "おはよう。。。桜花" 10 90  0   0   255 ; <== テキスト3
text "おはよう。。。桜花" 10 125 255 255 255 ; <== テキスト4
text "おはよう。。。桜花" 10 150 255 0   0   ; <== テキスト5
update                                       ; <== 画面更新

まとめて、5行のテキストが出力されます。

ケース2:■ 1行づつテキスト出力したい場合。

font MS 明朝 30 00 b                      ; <== フォント指定
text "おはよう。。。桜花" 10 20  255 0   0   ; <== テキスト1
update                                       ; <== 画面更新
text "おはよう。。。桜花" 10 55  0   255 0   ; <== テキスト2
update                                       ; <== 画面更新
text "おはよう。。。桜花" 10 90  0   0   255 ; <== テキスト3
update                                       ; <== 画面更新
text "おはよう。。。桜花" 10 125 255 255 255 ; <== テキスト4
update                                       ; <== 画面更新
text "おはよう。。。桜花" 10 150 255 0   0   ; <== テキスト5
update                                       ; <== 画面更新

では、実行させてみましょう。。。

でも、あれれれ・・・・???

速すぎて、その効果がわからない・・・ってことになりましたね。
しかも、画面がちらついて、見た目もぜんぜん美しくありません。

ご心配なく・・・。これは次のコマンドを説明するためのフクセンです^^;
どうやら、更新間隔に問題があるようなので、描画スピードを調整してみましょう。。
waitコマンドは、描画スピードを調整するコマンドです。

■ wait コマンド

項目 内容
分類 待機コマンド
MXNovel エンジン Ver 0.01
機能 指定した時間(ms)だけ、待機します。
構文 wait 待機時間
パラメータ パラメータ1:  待機時間(ms)
※ 時間の単位はミリ秒です。 ミリ秒とは、1/1000秒のことです。
※ 1秒 = 1000ミリ秒
※ 3秒 = 3000ミリ秒
※ 0.5秒 = 500ミリ秒

では、ケース2:をwaitコマンドを使って、以下のように修正してみましょう。
■ 1行づつテキスト出力したい場合は、こんな感じになります。

font MS 明朝 30 00 b                      ; <== フォント指定
text "おはよう。。。桜花" 10 20  255 0   0   ; <== テキスト1
update                                       ; <== 画面更新
wait 1000                                    ; <== 1秒待機

text "おはよう。。。桜花" 10 55  0   255 0   ; <== テキスト2
update                                       ; <== 画面更新
wait 1000                                    ; <== 1秒待機

text "おはよう。。。桜花" 10 90  0   0   255 ; <== テキスト3
update                                       ; <== 画面更新
wait 1000                                    ; <== 1秒待機

text "おはよう。。。桜花" 10 125 255 255 255 ; <== テキスト4
update                                       ; <== 画面更新
wait 1000                                    ; <== 1秒待機

text "おはよう。。。桜花" 10 150 255 0   0   ; <== テキスト5
update                                       ; <== 画面更新
wait 1000                                    ; <== 1秒待機

どうです?旦那。 ご理解いただけましたか?
描画したいタイミングっていうのが、かなり重要だということが^^;

さてさて・・・
テキストを表示したならば、それを消去したくなるのが人情というもんです。
その人情?が、cleartext コマンドになります。

■ cleartext コマンド

項目 内容
分類 テキスト消去コマンド
MXNovel エンジン Ver 0.01
機能 テキストを消去します。
構文 cleartext
パラメータ なし

簡単ですね。。。
注意すべき点は、このコマンドを発行しても、すぐにテキストが消えるわけではないことです。
このコマンドも、例によって例のごとくニ手一組で、updateコマンドが呼ばれるまでは、画面はそのままの状態です。
■ 1行ぶん、テキストを出力してから、3秒後にテキストを消す場合。

TEXT "千尋、いつもいい子にしているよ。" 10 180 255 0 0 ; <== テキスト1
update                                                 ; <== 画面更新
wait 3000                                              ; <== 3秒待機
cleartext                                              ; <== ここでテキスト消去発行。
update                                                 ; <== ここで画面からテキスト1が消えます。

■ 応用例 1行づつテキストを出力する。
※ テキスト消去コマンドは、次のテキスト出力コマンドで間に合わすこともできます。

text "桜花がいれば何もいらない・・・" 10 180 255 0 0   ; <== テキスト2
update                                                 ; <== 画面更新
wait 3000                                              ; <== 3秒待機
cleartext                                              ; <== ここでテキスト消去発行。

;==== update ==== ここのupdateを節約する^^;せこい?

text "桜花が行くところなら、どこにでもいくよ。。" 10 180 255 0 0 ; <== テキスト3
update                                                           ; テキスト2が消えて、テキスト3が表示されます。
wait 3000

↑のようにすれば、1回分、updateコマンドを節約できます。
しかも、画面のちらつきも抑えることができて、まさに一石二鳥になります。
ちょっと、プログラマぽい発想かしら? それともセコイのかしら^^;

なお、テキストの同時出力数には制限があって、最大で128個まで同時に出力できます。
まぁ現実を考えると、これだけたくさんのテキストを同時に出力する機会もないのでしょうが^^;

■ 編集後記

今週は、updateコマンドとcleartextコマンドの解説いたしました。 
updateコマンドはwaitコマンドと組み合わせて使うことで、描画のタイミングを演出する重要なコンボであることをご理解いただけたと思います。。

さて来週ですが、エムノベで使う座標系について、説明したいと思います。
今までは、それについては意識せずに説明していましたが、来週はおさらいを兼ねて説明いたします。。
これもいわゆるエムノベのお約束の一つですが、画像(CG)を描画するときには、非常に重要な役割をいたします。
では、来週また逢いましょう♪ しーゆ。



[MXNovel INDEX] [戻る] [次へ]
◆◆ LAST UPDATE 2004.04.08