原典:
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を使った。