第22回 マウス・キーボードからの入力
CindyScriptで、マウスの動きやキーボードからの入力を取得する方法について述べます。CindyScriptが、他のプログラミング言語と大きく違う点は、処理を「スロット」に分割して書くことでしょう。スロットは、そのコードが「どのようなタイミングで」実行されるべきかで分類しているものだと思ってよいでしょう。プログラムをスロットに分けて記述することで、プログラム全体の構造がとても見やすくなるのがCindyScriptの特徴です。それぞれのスロットの役割については、ユーザーズガイドの「プログラムコードの入力」を参照してください。ただし、現在のスロット分類と少し違うところがあります。
さて、マウス・キーボードの入力を取得する方法ですが、CindyScriptに用意されているのはつぎの3つです。
mover():この演算子は、マウスによって今動かされた要素が何であるか(そのハンドル)を返します。
mouse():マウスボタンが押されたとき、マウスの位置を表すベクトルを返します。ベクトルは同次座標です。(無限遠点も考慮します) もし、2次元のユークリッド座標が必要であれば、 mouse().xy によって座標が得られます。
key(): キーボードで打たれた文字列を返します。
mover()とmouse()はマウス入力の関数ですので、Mouse Up/Down/Click/Drag のいずれかのスロットに書きます。ここでは、mouse()関数の働きを調べます。
まずはMouse Clickのスロットに置いてみましょう。
関数の働きを調べるだけですので、結果は println() 関数でコンソールに表示することにします。スクリプトメニューからCindyScriptを選んでスクリプトエディタを開き、Mouse Click スロットをクリックして、次のコードを入力します。(ここからカットアンドペーストでもいいでしょう)
---------------------------------------------------------------------------
println(mouse());
---------------------------------------------------------------------------
スクリプトの実行アイコン(歯車アイコン)をクリックした後、シンデレラの画面で適当にマウスボタンをクリックしたり、ドラッグしたりしてみましょう。それによって、クリックとドラッグで動作が違うことがわかるでしょう。
それ以外のスロットに置くとどうなるかはそれぞれ試してください。
また、mouse() を mouse().xy に変えてみましょう。そうすれば2次元の座標だけが得られます。その応用として、ある文字列を画面上のクリックした点の斜め上に表示するスクリプトを書いてみましょう。クリックしたときに動作させるので Mouse Clickスロットに置きます。
---------------------------------------------------------------------------
drawtext(mouse().xy,"クリックしました");
---------------------------------------------------------------------------
クリックとドラッグの違いをより明確にするために、次のコードをMouse Dragスロットにおいて実行してみましょう。
---------------------------------------------------------------------------
drawtext(mouse().xy,"ドラッグ中");
---------------------------------------------------------------------------
次に、キーボード入力です。ユーザーズガイドの「プログラムコードの入力」では、キーボード関連のスロットは1つですが、β版のBuild963 より、Key Down , Key Up , Key Typed の3つになりました。まずは、Key Typedスロットに次のコードを書いて実行してみましょう。歯車アイコンをクリックしたら、シンデレラのウィンドウを前に出してから何かキーを押します。
---------------------------------------------------------------------------
println(key());
---------------------------------------------------------------------------
打たれたキーの文字が印字されます。Shiftキーを押せば大文字になります。
しかし、いまのところユーザーズガイドには詳しい説明はなく、以下の点については不明です。
・なぜ3つのスロットに分けたのか
・特殊キー(カーソルキーなど)の扱いはどうなっているのか