レビニアよ。今回の解説はメッセージウィンドウの表示よ。文章表示コマンドを実行した時の枠画像のことね。
ぶっちゃけマウス操作ゲーム自作の解説とあまり関係ないのだけど、まぁ文章表示コマンド自体はどんなシステムのゲームだろうと使うでしょうから、一応解説させていただくわ。
※ちなみに作り方は基本システムとほぼ一緒なのであしからず。
ウディタの文章表示の仕組みを知る
何はともあれ仕組みを知るためにも、まずは何もせず文章表示コマンドを実行してみましょうか。タイトル画面表示のコモンに文章表示を入れてみるわね。
■文章:文章表示のテスト
ゲームを起動。入力した文章が表示されているけどそれだけね。基本システムの時のようにウィンドウや文章送りカーソルは表示されていないわ。
では、そもそもウディタの基本システムでどのようにメッセージウィンドウを表示しているのかというと、
このように、専用の並列実行コモンがあってそこで処理されているわ。
システム変数12番「メッセージ表示中?(1=ON) が 1 と同じ」は文章表示が実行されている時に中身が1になる変数で、これを並列実行のコモンが監視して必要に応じてウィンドウを表示させているのよ。
完全自作だと当然こういう処理は用意されていないから、これを自分で作る必要があるわね。
ただ、文章送りカーソルの表示はコモンではなくウディタ自体の機能によるものよ。基本システムのSystemFileフォルダにある画像素材をコピペして、
画像のようにシステムDB10番「ウィンドウ画像」のID0に設定してみて。
これだけで文章表示を実行した時に操作待ちのテキストカーソルが表示されるようになるわ。つまりウィンドウの表示/非表示だけコモンで自作する必要があるわけね。
メッセージウィンドウコモンを作成する
というわけで、メッセージウィンドウを表示するコモンを作っていきましょう。
コモン作成:名前「▲メッセージウィンドウ」、起動条件「並列実行(常時)」
最初に入力するのは文章とテキスト送りカーソルの表示位置の指定。とりあえず数値は基本システムと同じに設定してみるわね。
■変数操作: Sys1:メッセージウィンドウ X座標 = 20 + 0
■変数操作: Sys2:メッセージウィンドウ Y座標 = 172 + 0
■変数操作: Sys5:ポーズカーソルX (-1=自動) = 160 + 0
■変数操作: Sys6:ポーズカーソルY (-1=自動) = 60 + 0
システム変数1と2が文章、5と6がテキスト送りカーソルの表示座標になるわ。ここを設定/変更してあげれば表示される位置を変えることができるのよ。
※「メッセージウィンドウ 座標」という名前が付いているけど、これは表示される文章の位置であってウィンドウじゃないから注意してね。
そしたら次に、メッセージウィンドウを透明で仮表示。
■ピクチャ表示:99998 [中心]ウィンドウ「SystemFile/WindowBase.png」サイズ[300,70] X:160 Y:200 / 0(0)フレーム / パターン 1 / 透 0 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
不透明度を0にしてとりあえずピクチャ表示だけさせるのよ。ウィンドウの座標やサイズは基本システムと同じにするわね。ピクチャ番号はマウス演出が99999だったから99998でいいかな?
ここまでがこのコモンの初期設定。つまり最初に1度だけ実行されればいい処理だから、
以降の処理はループを作成してその中で実行させるわ。ウェイト1フレームも入れてね。
■ループ開始
|■ウェイト:1 フレーム
|■
◇ループここまで◇◇
ここから先の処理はまぁ想像がつくと思うけど、前述したシステム変数12番を監視して透明表示させておいたウィンドウを表示させたり消したりする感じね。
システム変数12番の条件分岐を作成。
■条件分岐(変数): 【1】 Sys12:メッセージ表示中?(1=ON) が 1 と同じ
-◇分岐: 【1】 [ Sys12:メッセージ表示中?(1=ON) が 1 と同じ ]の場合↓
|■
◇分岐終了◇
この中でウィンドウを表示するコマンドを入れればいいのだけど、それだけだと×よ。なぜなら文章表示されている間中ずっと処理が繰り返されちゃうから。
なのでウィンドウが既に表示されているかを記録するためのコモンセルフ変数を用意して、
更に分岐を追加してその中にウィンドウ表示のピクチャコマンドを作成してね。
■条件分岐(変数): 【1】 CSelf10[既に表示中?] が 0 と同じ
-◇分岐: 【1】 [ CSelf10[既に表示中?] が 0 と同じ ]の場合↓
|▼ メッセージウィンドウを表示(不透明度255)
|■ピクチャ移動:99998 X:160 Y:200 / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
|■変数操作: CSelf10[既に表示中?] = 1 + 0
|■
◇分岐終了◇
最初に透明表示させておいたウィンドウ画像を透明度255にして表示させてあげるのよ。
次はウィンドウの消去処理。作成した条件分岐2つの後に作成するのよ。まずはウィンドウが既に表示されているかどうかの分岐よ。
■条件分岐(変数): 【1】 CSelf10[既に表示中?] が 1 と同じ
-◇分岐: 【1】 [ CSelf10[既に表示中?] が 1 と同じ ]の場合↓
|■
◇分岐終了◇
その中にさらに分岐作成。文章が表示されていないかの条件分岐を入れてね。
■条件分岐(変数): 【1】 Sys12:メッセージ表示中?(1=ON) が 0 と同じ
-◇分岐: 【1】 [ Sys12:メッセージ表示中?(1=ON) が 0 と同じ ]の場合↓
|■
◇分岐終了◇
つまり表示の時の分岐と逆。「ウィンドウが既に表示されていて」「文章が表示されていない」状態ということだから、ウィンドウを非表示にするタイミングになるわね。
じゃあここでピクチャをまた透明度0にすればいいのかというと、ちょっと一工夫が必要よ。
画像のように回数付きループを作成して、文章が再表示されていないかどうかを3フレーム監視しましょう。
■回数付きループ [ 3 ]回
|■条件分岐(変数): 【1】 Sys12:メッセージ表示中?(1=ON) が 1 と同じ
|-◇分岐: 【1】 [ Sys12:メッセージ表示中?(1=ON) が 1 と同じ ]の場合↓
| |■
|◇分岐終了◇
|■ウェイト:1 フレーム
|■
◇ループここまで◇◇
なんでこんなことをするかというと文章表示コマンドを連続実行した場合の措置よ。こうしないと、連続した文章表示の合間の一瞬にいちいちウィンドウが消えてしまうからね。だから数フレームだけ余裕を持たせているという事。
この3フレームの猶予中にまた文章が表示されてた場合は、ウィンドウを引き続き表示し続ける必要があるから、ラベルを使ってウィンドウ表示の処理にジャンプさせましょう。
●ラベル地点「ウィンドウ表示」 <<<<<<<<<<<<<<<<<<<<<<<<★
●ラベル「ウィンドウ表示」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
※入力位置は画像を参照のこと
3フレーム待っても文章が表示されていないようならウィンドウを消しても大丈夫ね。ループから出てウィンドウを非表示にしましょう。
■ピクチャ移動:99998 X:160 Y:200 / 0(0)フレーム / パターン 1 / 透 0 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作: CSelf10[既に表示中?] = 0 + 0
これで、文章表示に合わせてメッセージウィンドウを表示/非表示してくれる並列コモンは完成よ。
メッセージウィンドウの表示/非表示を試してみる
それじゃ試してみましょう。このように文章表示と合わせてウィンドウ枠が表示されて、
文章を送った後に一緒にウィンドウも消去されれば成功よ(実際は消去じゃなく透明にしたのだけど)。
文章表示をマウスクリックで操作する方法
ちなみにマウスクリックで文章表示を送る場合、実はシステム変数73番を1に変更する必要があるわ、そのままじゃマウスでの文章送りはできないの。
じゃあなぜ今回マウスクリックで文章が送れたのかというと、
最初に作成したシステム初期設定コモンでしれっと変数操作を入れていたからよ。覚えていたかしら?
マウスで文章送りした際に効果音を鳴らす方法
文章をマウスクリックで送った時に無音なのはちょっと寂しいわよね。効果音を付けてみましょうか
やり方は難しくないわ。画像のようにマウス演出コモンに処理を追加するだけよ。左クリックした場合にクリック演出をしている処理の部分ね。
■条件分岐(変数): 【1】 Sys12:メッセージ表示中?(1=ON) が 1 と同じ
-◇分岐: 【1】 [ Sys12:メッセージ表示中?(1=ON) が 1 と同じ ]の場合↓
|■サウンド:SE ファイル[SE/[SE]Enter.ogg] 音 0% 周 0% (0 チャンネル) 再生 / 遅延:0フレーム
|■
分岐終了◇
文章表示を左クリックで送った時に一緒に効果音が再生されれば成功よ(スクショじゃわかんないけど)。
といった感じでメッセージウィンドウの表示についての解説は以上よ。マウス操作に関連する部分はあまりなかったけど、まぁなんであれ文章表示コマンドは使うでしょうし、知っておく必要はあると思うわ。