HyperCard tribute
ハンドラの中でマウスをチェック
HyperCardは、メッセージを受け取ることでハンドラが実行されます。しかし、メッセージを受け取れるのは、HyperCardがアイドル状態の時に限られます。 それでは、実際にハンドラを実行しているときに、マウスのボタンチェックなどをしたいという時はどうすればよいのでしょうか。例として、ハンドラ実行時にマウスのボタンが押されたら実行を中断するものを作ってみます。
3行目から5行目までの間にあるスクリプトが、メインのスクリプトと考えて下さい。マウスのボタンが押されるまで、メインのスクリプトを実行し続けるというものです。 今回は、このループ内でメッセージボックスの値を1ずつ増加させていますが、もちろん内容はどのようなものでも構いません。 3行目では、どの条件であればループを繰り返すかを記してあります。the mouseはマウスのボタンが押されているかを調べます。押されてなければup、押されていればdownとなります。 whileは正しければを意味します。反対語としてuntil(正しくなければ)があります。
untilを用いた書き方をすることも可能です。
マウスのボタンが押されているが正しくなければ、繰り返すという事になります。 次は、if文を用いてマウスのチェックをしてみます。
repeat文には条件が与えられていませんから、永遠にループが繰り返されます。 5行目で、マウスボタンが押されたかどうかをチェックします。exitとは抜けるという意味です。今回はexit repeatですのでrepeat文を抜けます。 先ほどのセクションではドラッグできるボタンを作ってみました。それを、今回のハンドラ中でのマウスチェックを用いて他の書き方をしてみることにします。
2行目で、マウスカーソルの位置とボタンのtop座標との位置の差を調べています。 3行目で、繰り返しの条件を設定します。
4行目で、ボタンのtop座標を、マウスカーソルの位置を補正した値にセットします。
つまり、mouseDownのハンドラ中で、マウスボタンが押されているかどうかをチェックすることで、mouseStilldownの代わりをさせているのです |