Luaレッスン6.2「矢印キーを使う」和訳

原典:

http://compasstech.com.au/TNS_Authoring/Scripting/script_tut6.html

レッスン6.2「矢印キーを使う」

このレッスンの読者はどうだか知りませんが、わたくしに限って言えば、ポイントをドラッグするのに、わざわざグラフ・ページに移動してそのポイントをつかまなければならないというのはやはり面倒です。たとえば、スライダーを設定して、tabキーでそのスライダーへ移動し、enterキーを押してから矢印キーでスライダーを操作するときなどは特にそうですが、これまでにわたくしはありとあらゆる代替手段を探ってきました。これと同じ操作は、今回のレッスンで述べる方法を使えばもっと簡単に実行できます。矢印キーでポイントが動かせるのです。

空のTIDEドキュメントへ戻って以下のスクリプトを入力してください。

function on.arrowUp()

              local y = (var.recall("py") or 0)

              var.store("py", y+1)

end

このスクリプトをよく見てください。Luaは、TI-Nspireのシンボル・テーブルに含まれている変数pyを探し、その値をLuaのローカル変数yにストアします。変数pyが見つからない場合は、値0がyに代入されます。

そのあとpyが1増分されますので、座標が1ユニットぶんだけ上へ移動します。

特にハンドヘルドで作業している場合はそうですが、普通は、何か変化したときに画面をリフレッシュしたほうがよい。それには以下のコマンド・ラインを追加するだけです。((訳註)local screen = platform.windowを挿入する必要がある)

function on.arrowUp()

              local y = (var.recall("py") or 0)

              var.store("py", y+1)

              screen:invalidate()

end

このスクリプトをあと3回、コピー・アンド・ペーストし、適宜、arrowDown (y - 1)、arrowLeft (x - 1)、arrowRight (x + 1)に書き換えてください。大文字、小文字は別の文字と見なされます! 

もっと簡単な方法もあります。以下のように全部まとめて1つの函数にすることも可能です。

function on.arrowKey(key)

              if key == "down" then

                            local y = (var.recall("py") or 0)

                            var.store("py", y-1)

              elseif key == "up" then

                            local y = (var.recall("py") or 0)

                            var.store("py", y+1)

              elseif key == "left" then

                            local x = (var.recall("px") or 0)

                            var.store("px", x-1)

              else

                            local x = (var.recall("px") or 0)

                            var.store("px", x+1)

              end

              screen:invalidate()

end

では、Player((訳註)Playerって何?)のように、矢印キーのないプラットフォームの場合はどうすればよいでしょうか? 

クラスを導入すればいろいろな方法が使えますが、とりあえず簡単な方法として、on.mouseUp()(あるいはon.mouseDown())のようなコマンドに反応する“ホット・ゾーン”をページ上に設けるという方法があります。((訳註)local h = screen:height()、local w = screen:width()を挿入する必要がある)

((訳註)以下のスクリプトの説明:Lua画面の上下左右の端から20%の領域をクリックすると、矢印キーを押したのと同じ効果がある)

function on.mouseUp(x, y)

              if y < 0.2*h then

                            on.arrowKey("up")

              elseif y > 0.8*h then

                            on.arrowKey("down")

              elseif x < 0.2*w then

                            on.arrowKey("left")

              elseif x > 0.8*w then

                            on.arrowKey("right")

              end

              screen:invalidate()

end 

ムービー(

http://compasstech.com.au/TNS_Authoring/Scripting/script_tut6/script62.mov

-------------------------------------------------------------------------

(訳註)今回の実行例。原文どおりTIDEを使った。

f:id:ti-nspire:20141002103241j:plain

f:id:ti-nspire:20141002103247j:plain