![]() |
今回は、日付表示をメッセージレイヤと連動できるようにしてみるね。 |
![]() |
それってどういうこと? |
![]() |
メッセージレイヤって、右クリックすると消えるでしょ。 |
![]() |
うん、消えるね。 |
![]() |
右クリックでメッセージレイヤを非表示にする時に日付も一緒に非表示にして、 もう一回右クリックしてメッセージレイヤを表示する時に日付も一緒に表示しようってこと。 |
![]() |
プラグインってそういうこともできるんだ? |
![]() |
うん。今作ってる日付表示プラグインみたいに、画面にシステム関係の画像を表示する場合は、 メッセージウィンドウを非表示にする時に、一緒に画面から画像を消したいってこともあるからね。 |
![]() |
なるほどね。 |
![]() |
で、そのために使うのが onMessageHiddenStateChanged メソッド。 |
![]() |
それって、メッセージレイヤが非表示になった時と表示された時に呼び出されるイベントハンドラ? |
![]() |
基本的にはそうなんだけど、onMessageHiddenStateChanged メソッドは、 ユーザの操作によってメッセージレイヤが非表示になったり表示されたりした時にだけ呼び出されるんだ。 |
![]() |
ユーザの操作によって、って? |
![]() |
ユーザがメッセージレイヤを操作した時、例えば右クリックしたりとか、 メニューの「メッセージを消す」を選択したりとか、そういう時に呼び出されるってこと。 |
![]() |
じゃあ position タグで visible 属性を設定した時は呼び出されないの? |
![]() |
うん。そういうのはシナリオファイルに書いてあるから、 ユーザが意図的にメッセージレイヤを操作してるわけじゃないでしょ。 |
![]() |
あ、そっか。 |
![]() |
ただ、hidemessage タグを実行した場合は呼び出されるけどね。 |
![]() |
あ、そうなんだ。 それって hidemessage タグはメニューの「メッセージを消す」を選択するのと同じ動作をするタグだから? |
![]() |
うん、そういうこと。 じゃ、実際に onMessageHiddenStateChanged メソッドを作ってみるね。 |
![]() |
は〜い! |
<onMessageHiddenStateChanged メソッド>
![]() |
まず、onMessageHiddenStateChanged メソッドには引数が1つあるんだ。 |
![]() |
hidden っていうのだよね? |
![]() |
そ。この hidden っていう引数は、 メッセージレイヤが非表示になった時には true になってて、 表示された時には false になってるんだ。 |
![]() |
ってことは、メッセージレイヤが非表示になった時は if の方のブロックの中身が実行されるから、 foreLay と backLay も非表示になるんだよね? |
![]() |
ん、そう。 |
![]() |
メッセージレイヤが表示された時は else の方のブロックの中身が実行されるんだよね? |
![]() |
そうだよ。 |
![]() |
じゃあ foreLay と backLay の visible を
true にすればいいんじゃないの? なんでわざわざメンバ変数を使ってるの? |
![]() |
もしかしたらメッセージレイヤが非表示になる前に、 foreLay と backLay が非表示だったかもしれないでしょ。 |
![]() |
あ、そっか。 foreLay と backLay の visible を true にしちゃうと、元々非表示だった場合でも表示されちゃうんだ。 |
![]() |
そうならないようにするために、メッセージレイヤが非表示になる前の foreLay と backLay の visible の値を foreVisible と backVisible に予めセットしといて… |
![]() |
メッセージレイヤが表示された時に、メッセージレイヤが非表示になる前の状態に戻すんだね。 |
![]() |
そうそう。 |
![]() |
このために setOptions メソッドで foreVisible と backVisible の値を設定してたんだね。 |
![]() |
ん、そういうこと。 それじゃ、これでスクリプトはできたから、日付表示とメッセージレイヤの表示が連動するかどうか、実行して試してみよっか。 |
![]() |
うん。 |
![]() |
実行する前に、Config.tjs のメッセージレイヤの initialMessageLayerVisible を true にしといてね。 |
<初期状態でメッセージレイヤを表示します(Config.tjs より抜粋)>
![]() |
うん、直したよ。 |
![]() |
あと、first.ks はこんな感じね。 |
<first.ks の中身>
![]() |
それじゃ、実行してみて。 スクリプトはここに置いとくから。 |
![]() |
はーい! |
<起動直後のウィンドウ>
![]() |
最初はメッセージウィンドウと日付が両方表示されてるね。 |
![]() |
ん。じゃ右クリックしてみて。 |
![]() |
おっけー。 |
<右クリック後のウィンドウ>
![]() |
あっ、メッセージウィンドウと日付がどっちとも消えた! |
![]() |
ん、OK だね。 それじゃ、もう一回右クリックしてみて。 |
![]() |
うん。 |
<もう一回右クリックした後のウィンドウ>
![]() |
ちゃんと日付も表示されてるね。 |
![]() |
ん。あと、日付を非表示にしてる時もうまくいくかチェックしてみよ。 first.ks をこう書き換えて実行してみて。 |
<日付を非表示にした first.ks>
![]() |
dateopt マクロの visible の指定を消すんだね。 |
![]() |
ん。日付表示のレイヤはデフォルトで非表示にしてるからね。 |
![]() |
じゃあ、実行してみるね。 |
<起動直後のウィンドウ>
![]() |
今度はメッセージウィンドウだけが表示されたね。 |
![]() |
ん。じゃ右クリックね。 |
<右クリック後のウィンドウ>
![]() |
1回右クリックするとメッセージウィンドウが消えて、もう1回右クリックすると… |
<もう一回右クリックした後のウィンドウ>
![]() |
ちゃんと元の状態に戻ったね。 |
![]() |
ん、これで OK だね。 今回の内容はだいたい解った? |
![]() |
うん。onMessageHiddenStateChanged メソッドの作り方はそんなに難しくなさそうだし。 |
![]() |
じゃ、今回はこんな感じかな。 次回からはプラグインのデータを保存したり読み込んだりしてみるね。 それじゃ、また次回ね! |