Luaレッスン15「複数のクラスをマウスで制御する」和訳

原典:http://compasstech.com.au/TNS_Authoring/Scripting/script_tut15.html

レッスン15「複数のクラスをマウスで制御する」

レッスン14では、複数のクラス・オブジェクトをキーボードで選択して動かす方法を学びました。今シリーズの最終レッスンでは、キーボードの場合と同じ手法をマウス・コントロールに適用します。必要なコードのほとんどは、TrackedObject変数を使ってすでに構築済みです。必要なことは、以前定義したSquare専用のスクリプトの場合とは違って、ObjectsテーブルなしでmouseDown函数が機能するように汎用化することです。

どのような処理が行われるのかを理解するためには、mouseDown函数の各部を詳細に調べる必要があります。

この函数の先頭の部分は、tabKey函数とまったく同じです。つまり、Objectsテーブル内の各オブジェクトを巡回しながら、ローカル変数objをそれぞれのオブジェクトに割り当てていきます。これまでに学んだことからわかるように、contains函数を使って特定大部じぇくと内でマウス・ダウンを行った場合は、そのオブジェクトが追跡対象のオブジェクトとなります。

以前と同じように、現在の状態を知る手段として、当のオブジェクトがすでに選択されていた場合は、最初にそのオブジェクトを開放します。そのあとで、TrackedObjectをobjとして定義し、選択されたことを示します。

次の2行で、TrackOffsetxおよびTrackOffsetyという2つの新たなグローバル変数を定義します。お気づきかもしれませんが、オブジェクトの中心以外の場所をクリックした場合、そのオブジェクトの中心がカーソルの位置へ移動してしまいます。TrackedOffsetの各値は、こうしたわずかな移動を避ける働きをします。これらの各値は、ページの作成時および変更時にも存続するよう、on.resize函数の中で最初にゼロとして定義する必要があります。

複数のオブジェクトを追跡する方法へ話を戻しましょう。table.removeおよびtable.insertの両コマンドは、前に選択されたオブジェクトを開放して、現在選択されているオブジェクトに置き換える働きをします。要するに、目的のオブジェクトをテーブル内でのプライム・ポジションに移動するということです。これで、必要な効果が得られます。つまり、クリックされたオブジェクトが、選択されたオブジェクト(追跡されるオブジェクト)になるわけです。

mouseMoveに加えた変更は後1つだけです。それは、先に述べたTrackOffsetの各値を含めることだけです。

このコードをscript_tut14.luaにコピーすれば目標達成です。これで、マウスでもキーボードでも、2つのオブジェクトが操作できるようになりました。

 

選択したオブジェクトのクローンを作成する

複数のオブジェクトを選択して移動できるようにはなりました。こうしたオブジェクトをいくつでも生成できるようになったら素晴らしいと思いませんか? 四角または円をクリックしてドラッグしたときに、元のオブジェクトはそのまま残して、新たに複製されたオブジェクトを作成するのです。これは、有用な多くのアクティビティーのキホンであり、実現するのは驚くほど簡単です(マーク・ガルノーのおかげです!)。

今回作成しているドキュメントに含まれているクラス・オブジェクトはすべて、作成したObjectsテーブルのメンバーです。したがって、こうしたメンバーのいずれかのクローンを作成するのは、テーブルに新たなメンバーを追加することにすぎません。しかもその方法はすでに学習済みです。table.insertコマンドを使います。

mouseDown函数内で、選択したオブジェクトの有無を確認するループのどこかに、以下に示したコードを挿入すればよいのです。このコードは、TrackedObjectの色を確認して、もし緑色でなら四角を追加し、そうでなければ円を追加するコードです。マウスの現在位置に追加されますので、選択されたオブジェクトとクローンのオブジェクトとは重なって表示されます。

今回の例では、マウス・ダウンでも、オブジェクトを選択してenterを押したときでも、目的の処理が実行されるようになっています。

enterKeyも同じ方法ですが、基準となるマウス位置がないので、もう少し手を加える必要があります。

これで、タイルやコインなど、オブジェクトは何でも無限に追加できるようになりました。

このスクリプトを応用して、ほかにさまざまなオブジェクトを追加してみてください。好きなオブジェクトを定義して、それをObjectsテーブルに追加すれば、四角や円を操作するのと同じように簡単に、独自に追加したオブジェクトが操作できます。イメージも同じように操作できます。

ここで、レッスン11で学んだ図形数に戻ってみましょう。ハンドヘルドでもコンピューターでも問題なく同じように機能するリッチでパワフルなドキュメントはどうすれば作成できるのか、考えてみてください。

今シリーズのレッスンはこれで終わりです。レッスン16でいくつか補足します。

(訳註)スクリプトはサンプル・ファイルと同じなので省略