Luaレッスン7.3「画像をダイナミックにする」和訳

原典:

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

レッスン7.3「画像をダイナミックにする」 

ここまでは順調です。挿入した画像を画面にうまくはめ込む手段として、スケール・ファクターを手作業で調整するという方法ももちろん良いでしょう。しかしもっと良い方法があります。リアルタイムにスケールを変更する方法です。前回のレッスンで学んだように矢印キーを使います。 

まずはTI-Nspireドキュメントで使用する変数を作成するのがよいでしょう。私は通常、Geometryウィンドウを挿入してスケールを非表示にします。そのあとでscaleという名前のスライダーを挿入します。スライダーの可変範囲は0~1、ステップ幅は0.1に設定します。スライダーはあとで消去しても構いません。値は矢印キーで操作するからです。しかしそのドキュメントをPlayer(訳註:Playerって何?)で使えるようにしたい場合は、矢印キーは役に立ちませんので、スライダーは残しておきます。

local screen = platform.window --長ったらしいのでscreenにする

function on.construction() --0.2秒ごとに画面をリフレッシュ

     timer.start(1/5)

end

function on.timer()

     screen:invalidate()

end

function on.arrowUp() --上矢印キーが押されたら

     sc = (var.recall("scale") or 0.5) --Nspire変数scaleの値をscに代入

     var.store("scale", sc + 0.1) --scを0.1増分してNspire変数scaleに書き戻す

     screen:invalidate() --画面をリフレッシュ

end

function on.arrowDown() --下矢印キーが押されたら

     sc = (var.recall("scale") or 0.5) --Nspire変数scaleの値をscに代入

     var.store("scale", sc - 0.1) --scを0.1減らしてNspire変数scaleに書き戻す

     screen:invalidate() --画面をリフレッシュ

end

 

上記の函数は、on.paint函数の前に定義することができます。見てわかるように、TI-Nspireのシンボル・テーブルにある変数scaleの値を確認する働きをする函数です(変数scaleが存在しない場合は値0.5に設定されます)。矢印キーを押すたびに値が0.1ずつ増えるか減るかし、新しい値がscaleの値としてTI-Nsipreに書き戻されます。

 

on.paint函数に加えた唯一の変更点は、scaleの現在の値を取り込んで、その値をLua変数scとして定義するというものです。scの変化するたびに画面をリフレッシュしても(すなわちplatform.invalidateコマンドを実行しても)どうということはありません。

function on.paint(gc)

     local w = screen:width()

     local h = screen:height()

     sc = (var.recall("scale") or 0.5)

     imw = sute:width()

     imh = sute:height()

     im = sute:copy(sc * imw, sc * imh)

     imw = im:width()

     imh = im:height()

     gc:drawImage(im, (w - imw)/2, (h - imh)/2)

end

これで、上下の矢印キーで画像のスケールが制御できるようになりました。

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

(訳註)今回の実行例。スライダーの上限、下限をif文で追加設定した。

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

f:id:ti-nspire:20141003104937g:plain