じゃ、今回は前回追加するって言ったメソッドを作ってくね。 | |
は〜い! | |
まずは setAlarmFile メソッドから。 このメソッドは §2.8 で作った FileSelector クラスのオブジェクトを使って作ってね。 |
|
えっと、openFile メソッドを使えばいいんだよね? | |
ん、そだよ。 ファイルが選択されたら、WaveSoundBuffer クラスの open メソッドで開いてね。 |
|
うん、りょーかい。 | |
あと、例外処理もしといてね。 | |
例外処理って、どんな感じにすればいいの? | |
§3.12の open メソッドでやってるみたいに、 送られてきた例外メッセージを inform メソッドで表示してくれればいいよ。 | |
わかった。 じゃあ、やってみるね。 |
こんな感じでいい…? | |
ん、OK。ちゃんと書けてるよ。 | |
よかった〜。 | |
じゃあ次はアラームをセットする setAlarm メソッド だね。 | |
これって Clock クラスの setAlarm メソッド を使って作ればいいんだよね? | |
うん、そうそう。 で、アラームがセットされたら、タイトルバーとタスクバーに「Alarm ON」って表示してね。 |
|
うん、おっけー。 | |
あと、アラームがセットされてる時は、プライマリレイヤの上にマウスカーソルを乗せると、アラームの設定時刻が表示されるようにするから。 こんなふうにね。 |
<アラームの設定時刻表示>
こういう表示ってよく見かけるけど、これもできるの? | |
うん。Layer クラスに hint っていうプロパティがあって、 このプロパティに表示したい文字列を設定すれば、こういうふうに表示できるよ。 | |
へぇ、結構カンタンにできるんだね。 | |
でしょ。 | |
プライマリレイヤの上にマウスカーソルが乗った時に表示されるようにするってことは、 primaryLayer.hint に文字列を設定すればいいってこと? | |
ん、そういうこと。 あとはできそう? |
|
えっと、いつアラームを鳴らすかは Clock クラスの getAlarmTime メソッド を呼び出せば判るんだったよね? | |
ん、そだよ。 | |
うん、あとはだいじょぶだと思う。 じゃあ、やってみるね。 |
<setAlarm メソッド>
これでどうかなぁ? | |
うん、getAlarmTime メソッドの使い方も OK だし、 sprintf メソッドもちゃんと使えてるね。 | |
やった! | |
ちなみに、hint プロパティを設定してる行はこう書いても OK だよ。 |
あ、"Alarm: " の部分も sprintf メソッドの文字列の中に入れちゃっていいんだ? | |
sprintf メソッドで置き換えられるのは % から始まる部分だけで、 それ以外の部分はそのままになるからね。 | |
なるほどね〜。 | |
それじゃ次は cancelAlarm メソッド。 これは簡単だよね。 |
|
Clock クラスの cancelAlarm メソッド を呼び出せばいいんだよね? | |
ん、あとタスクバーとタイトルバーの表示は「Alarm OFF」にして、 プライマリレイヤの上にマウスカーソルが乗っても何も表示されないようにしてね。 |
|
あ、そっか。 えっと、プライマリレイヤにマウスカーソルが乗っても何も表示されないようにするにはどうしたらいいの? |
|
hint プロパティに空文字列("")を設定すればいいよ。 | |
そうなんだ。 じゃあ… |
<cancelAlarm メソッド>
これでいいんだよね? | |
ん、OK。 じゃ次は checkAlarm メソッド だね。 |
|
アラームを鳴らす時刻になったかどうかのチェックかぁ…どうやったらいいんだろ? | |
Clock クラスのメソッドを2つ使えばできるよ。 | |
2つ? …ってことは、getAlarmTime メソッド と… あ、あと、今の時間も判らないといけないから getTime メソッド かな? |
|
ん、そうだね。 じゃあ、今の時刻がアラームを鳴らす時間かどうかをチェックする条件式はどうなると思う? |
|
ん〜… getAlarmTime メソッド の戻り値の辞書配列の hour と getTime メソッド の戻り値の辞書配列の hour が同じになってて、 あと min と sec も同じになってればいいんじゃないかな? | |
そうそう。そこまで解ればできるでしょ。 | |
えっとね〜… |
<checkAlarm メソッド>
これでいいと思うんだけど…どうかなぁ? | |
ん、ちゃんとできてるよ。 | |
ほんと? | |
ただ、もうちょっと簡単に書けるかな。 |
条件式をそのまま返すんだ… | |
条件式が真なら true を返して、偽なら false を返すんだから、こう書いても同じ結果になるでしょ。 | |
そっか、確かに同じになるね。 | |
んじゃ次ね。 次は playAlarm メソッド なんだけど、 再生と停止は対応してるから、stopAlarm メソッド も一緒に作っちゃって。 |
|
えっと、playAlarm メソッドの方は、status が "stop" だったら再生して、 stopAlarm メソッドの方は、status が "play" だったら停止すればいいんだよね? | |
ん、そうだね。 ただ、アラーム用のファイルが設定されてないと再生できないから、 もしアラーム用のファイルが設定されてない場合は、アラームを解除して「アラームファイルが設定されていません」っていうメッセージを表示するようにしてね。 |
|
アラーム用のファイルが設定されてるかどうかは、どうやったら判るの? | |
buffer の status が "unload" になってたら、
ファイルが開かれてないってことだから、それをチェックすれば判るよ。 あと、stopAlarm メソッドの方は、停止した後に cancelAlarm メソッドを呼び出しといてね。 |
|
わかった。じゃあやってみるね。 |
<playAlarm メソッド& stopAlarm メソッド>
これでいいかな? | |
ん、OK。これは前にも同じようなスクリプト書いてるから簡単だったかな。 | |
うん。 これはすぐにできたよ。 |
|
最後は action メソッド なんだけど… ちょっと長くなりそうだから、次回作ることにするね。 |
|
あ、そうなの? | |
うん。 というワケで、また次回ね〜。 |