今回はマクロを使って DatePlugin クラスのメソッドを呼び出してみるね。 | |
マクロを使って drawDate メソッド を呼び出せるようにするの? | |
ん〜、それでもいいんだけど、せっかくだからマクロ用にもっと色々設定できるメソッドを作ろうと思うんだ。 | |
色々設定できる…って? | |
日付の他に、レイヤの位置と表示/非表示を設定できるメソッドを作るの。 | |
それ全部1つのメソッドで設定するの? | |
そうだよ。マクロって属性を一度にたくさん指定できるでしょ。 だから、日付の属性と位置の属性と表示/非表示の属性を一度に指定できるようにするんだ。 |
|
そっか。マクロに指定されてる属性って mp で全部参照できるもんね。 | |
それじゃ、日付とレイヤの位置と表示/非表示を設定する setOptions メソッドを作ってみるね。 | |
うん。 | |
あ、その前にメンバ変数を追加しとくね。 | |
それって日付とレイヤの位置と表示/非表示の情報を保存しとくためのメンバ変数? | |
そうそう。 それぞれ表レイヤ用と裏レイヤ用に作るから、追加するメンバ変数はこの6つ。 |
<追加するメンバ変数>
あと、drawDate メソッドもちょっと書き換えとくね。 |
前の drawDate メソッド には引数が3つあったけど、
この drawDate メソッド には引数が fore しかないね。 なんで month と day を取っちゃったの? |
|
メンバ変数で日付を管理するようにしたから、月日を引数で指定するんじゃなくて、
月の表示には foreMonth と backMonth を使って、
日の表示には foreDay と backDay を使うようにしたんだ。 |
|
あ、なるほどね。 | |
で、これが setOptions メソッドね。 |
あと、setOptions メソッド を呼び出す dateopt マクロはこう定義するね。 |
setOptions メソッド の引数 elm の要素、 つまり dateopt マクロに指定できる属性はこの6つだよ。 |
<setOptions メソッドの引数 elm に指定できる要素(dateopt マクロに指定できる属性)>
要素(属性)名 | 設定項目 | 値 | デフォルト値 |
---|---|---|---|
page | 設定対象のレイヤ | "fore":表レイヤ、"back":裏レイヤ | "fore" |
visible | 表・裏レイヤの表示・非表示 | true:表示、false:非表示 | なし |
left | 表・裏レイヤの左端位置 | 数値 | なし |
top | 表・裏レイヤの上端位置 | 数値 | なし |
month | 表・裏レイヤに表示する月 | 数値 | なし |
day | 表・裏レイヤに表示する日 | 数値 | なし |
なんか結構ややこしそうだよね… | |
色々設定してるから長くなっちゃってるけど、やってることは単純だよ。 | |
そうなの? | |
うん。じゃ順番に見ていくね。 まず最初に引数の辞書配列 elm の page っていう要素をチェックして、表と裏どっちのレイヤの設定をするかを決めてるんだ。 |
|
じゃあ、fore っていう変数は、設定の対象が表レイヤかどうかを表してるってこと? | |
うん。表レイヤに日付を設定するときは fore は true で、 裏レイヤに日付を設定するときは false になるの。 | |
elm.page は dateopt マクロ に指定されてる page 属性の値になってるんだったよね? | |
そ。page 属性に "fore" が指定されてたら fore を true にしてるの。 あと、page 属性が省略されてた場合も true にしてるんだ。 |
|
最後の else って、page 属性の値に "fore" でも
"back" でもない値が指定されてた場合ってことだよね…? その時って、何もせずに return しちゃうの? |
|
ん〜、ホントはちゃんとエラー処理とかした方がいいんだろうけど、 今回はスクリプトを簡単にするために属性値のエラーチェックは省略してるんだ。 | |
ちょっと手抜きな気がするんだけど…? | |
ま、まぁ今回はスクリプトを見やすくするために、ね。 気になるんだったら、エラー処理のやり方も考えてみてね、ってことで。 |
|
う〜ん…ま、いっか。 えっと、その後はレイヤを表示するか非表示にするかを設定してるんだよね? |
|
ん、そう。 visible 属性が指定されてたら、レイヤの表示/非表示を設定するの。 |
|
foreLay.visible とか backLay.visible に elm.visible の値を設定するのはわかるんだけど、 なんで foreVisible とか backVisible っていうメンバ変数にも同じ値を代入してるの? | |
今回は foreVisible と backVisible は使わないんだけど、
メッセージウィンドウを非表示にした時に日付も一緒に非表示にしたりする時に必要になるから、今のうちに作ってるんだ。 詳しくは次回やるから、今はあんまり気にしなくていいよ。 |
|
ふぅん、そうなんだ。 その次は、レイヤの位置を設定してるんだよね? |
|
うん。 left 属性が指定されてたらレイヤの左端の位置を設定して、 top 属性が指定されてたら上端の位置を設定してるの。 |
|
えっと、(fore ? foreLay.left : backLay.left) = +elm.left; って、なんか見慣れない書き方なんだけど…? | |
条件演算子はわかるよね? | |
うん。§1.20 で出てきたよね。 でも、今まで条件演算子って、代入演算子の左側に出てきたことってなかったと思うけど…? |
|
代入式の左側にある時も考え方は同じだよ。 カッコの中身は、fore が true だったら foreLay.left に置き換わって、 false だったら backLay.left に置き換わるんだから… |
|
あ、そっか。 fore が true だったら foreLay.left = +elm.left; が実行されて、 false だったら backLay.left = +elm.left; が実行されるんだね。 |
|
そういうこと。 で、最後に、同じようなやり方で月日を設定するわけね。 |
|
month 属性が指定されてたら月を設定して、 day 属性が指定されてたら日を設定するんだよね。 | |
うん。 | |
dateChanged っていう変数は何のために使ってるの? | |
もし month 属性も day 属性も指定されてなかったら、日付を変える必要はないでしょ。 | |
うん、そだね。 | |
その時は、drawDate メソッドを呼び出す必要はないでしょ。 | |
あ、だから month 属性か day 属性が指定されてる時に dateChanged を true にして、 dateChanged が true になってる時だけ drawDate メソッドを呼び出すんだね。 | |
ん。こうすれば無駄がないからね。 | |
なるほどね〜。 | |
あとは、onCopyLayer メソッド と onExchangeForeBack メソッド を書き換えとかないとね。 | |
えっ、なんで? | |
だって、表レイヤの内容が裏レイヤにコピーされたら、裏レイヤの位置と表示/非表示と日付を表レイヤと同じにしなくちゃいけないでしょ。 あと、表と裏のレイヤが入れ替わったら、位置とかも入れ替えなくちゃいけないしね。 |
|
あ、そういうのもコピーしたり入れ替えたりしなくちゃいけないんだ。 | |
というワケで、まずは onCopyLayer メソッドを書き換えてみて。 | |
えっ? えーっと…具体的には何をすればいいのかな…? | |
toback が true のとき、つまり表画面の内容が裏画面にコピーされるときは、こうすればいいよ。 |
<toback が true のときに onCopyLayer メソッドでやること>
1. のレイヤの内容をコピーするっていうのは §4.6 でやってるよね。 | |
それって、assignImages メソッドのこと? | |
そうそう。だから今回は 2. 〜 4. の部分を作ってね。 | |
えっと、2. は setPos メソッドを使って、 3. は visible プロパティを使えばいいんだよね? | |
ん、そだね。 | |
4. は普通に表レイヤ用のメンバ変数を裏レイヤ用のメンバ変数に代入すればいいの? | |
うん、それでいいよ。 あと、toback が false のときは、表レイヤと裏レイヤが逆になるだけで、やることは同じだよ。 どう、できそう? |
|
うん、じゃあやってみるね。 |
ん〜、こんな感じかなぁ。 | |
ん、これで OK だよ。 じゃ、次は onExchangeForeBack メソッドも書き換えてみて。 |
|
onExchangeForeBack メソッドって、 §4.7 だと表画面用レイヤと裏画面用レイヤの参照を入れ替えてたよね。 | |
うん。参照が入れ替わると位置とか表示状態も入れ替わるから、 foreLay と backLay についてはこれ以上やることはないよね。 | |
ってことは、メンバ変数を入れ替えればいいんだよね? | |
ん、そういうこと。 | |
それじゃ、書き換えてみるね。 |
これでいいんだよね? | |
ん、OK。 それじゃ、これでスクリプトができたから、実際にマクロを使ってみよっか。 |
|
は〜い! | |
じゃあ、dateopt マクロを使って、
表画面のレイヤを (20, 30) の位置に表示して、日付を1月23日にしてみて。 あ、あと今回からレイヤは初期状態で非表示にするから、visible 属性も設定して、レイヤが表示されるようにしてね。 |
|
え〜っと、表画面のレイヤだから、page 属性を fore にして、 (20, 30) の位置に表示するんだから、left 属性が 20 で、 top 属性が 30 だよね。 | |
ん、そうそう。 ちなみに page 属性はデフォルトで fore だから、省略しても OK だよ。 |
|
あ、そっか。じゃあ省略しとくね。 あとは、日付を1月23日にするんだから、month 属性が 1 で、day 属性が 23 になって、 visible 属性は true にすればいいから… |
<dateopt マクロの使用例(first.ks)>
こんな感じかな。 | |
んじゃ、実行してみよっか。 必要なファイルはここに置いとくね。 |
|
うん。それじゃ、実行! |
<実行結果>
これって、ちゃんと設定したとおりに表示されてるんだよね? | |
うん、マクロに指定した通りに表示されてるよ。 | |
やった! | |
あと、トランジションしてもちゃんと表示されるかどうかも確かめといてね。 | |
は〜い! | |
これでマクロについては大体 OK かな? | |
うん、おっけーだよ。 | |
じゃ、今回はここまで。 また次回ね! |