Luaレッスン12「上級篇:マウス・コントロール」和訳
原典:http://compasstech.com.au/TNS_Authoring/Scripting/script_tut12.html
レッスン12「上級篇:マウス・コントロール」
レッスン11では、「クラス」という、Luaの強力な機能を紹介しました。クラスの可能性は、まだまだたくさんあります。その中でもおそらく一番便利な機能は、キーボードだけでなくマウスでも画面オブジェクトがコントロールできることです(キーボードによるコントロールはすでに学びました)。
まずは準備作業から始めます。わたくしはいつも、ウィンドウの幅、高さをそれぞれ代入しおく変数を定義します。あとで簡単に参照できるようにするためです。お気づきかもしれませんが、わたくし個人のルールとして、グローバル変数はキャピタライズし、ローカル変数は小文字にしています。
今回のレッスンで重要なのはTrackedObjectという変数です。この変数は、最初は、nil(空)にしておきます。オブジェクトの位置を簡単に追いかけられるようにするための変数です。特に複数のオブジェクトを追跡しようとするときには便利な変数です。さらにサイズと始点とをもう少し精密に定義することが可能です。
マウスをクリックしたときの作用を定義することから始めましょう。クリックは、2つのアクションで成り立っています。マウス・ダウンとマウス・アップの2つです。最初に、TrackedObjectが存在しているかどうかについての簡単なチェックを行って、存在していた場合は、selectedプロパティーの状態をオフに設定します。この処理は、クリックしたときの状態を考慮したものです。
マウス・ダウンの場合は、目的のオブジェクトの内側をクリックした場合に限り、selectedプロパティーの状態をオンにして、そのオブジェクトをTrackedObjectにします。この処理は、containsコマンドで行います。
最後に、platform.window:invalidate()コマンドで画面をリフレッシュします。マウスを操作したときには、このコマンドによって画面が強制的にリフレッシュされますので、以前使用したtimerのようなほかの手段は不要です。
それ以外のマウス操作は非常に単純です。マウス・アップのときには、単にオブジェクトをリリースし、selectedプロパティーをオフにして、TrackedObjectをnilへ戻します。
最後はmouseMove函数です。TrackedObjectの存在していた場合(目的のオブジェクトに対してマウス・ダウンを行った場合)、そのオブジェクトの位置変数がマウスの位置と同じ値に設定されます。簡単ですね。
今回のレッスンの仕上げは、画面上でTrackedObjectをいろいろ動かしたときのその座標を表示することです。それには、以下のコマンド行をon.paintに追加するだけで済みます。
(訳註)原文はここにスクリプトがあるが、サンプル・ファイルどおりなので省略する。
次のレッスン(http://compasstech.com.au/TNS_Authoring/Scripting/script_tut13.html)では、今回のようなオブジェクトをキーボード・コマンドで操作する方法を復習します。
---------------------------------------------------------------
(訳註)今回の実行例