Luaレッスン7.4「画像をリアルタイムに入れ換える」和訳

原典:

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

レッスン7.4「画像をリアルタイムに入れ換える」

ここでは、定義しておいた複数の画像を左右の矢印キーで切り替える方法を紹介します。(中略)追加画像をsute2、sute3として定義します。 

Geometryウィンドウにスライダーを挿入します。名前はchooseとし、可変範囲は1~3とします。 

スケールを変えたときと同じように、左右の矢印キーで変数chooseの値を増減し、その値をLuaスクリプト側でchとして参照します。 

paint函数内でchooseの現在の値を呼び出し、if..then..elseif..endループで画像を定義します。

これで、左右の矢印キーで画像が切り替えられるようになったはずです。

おめでとうございます! これで、Luaで画像をディジタイズする方法(訳註:現行バージョンではディジタイズは不要)、定義する方法、挿入する方法、スケールを設定する方法、操作する方法はすべて学びました。今シリーズの最後のいくつかのレッスンでは、Luaを使って独自のグラフィックを作成する方法を採り上げます。

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

(訳註)今回作ったスクリプト。原文と少し変えた。

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

local sute1 = image.new(_R.IMG.sute1)

local sute2 = image.new(_R.IMG.sute2)

local sute3 = image.new(_R.IMG.sute3)

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に代入

     if sc >= 1 then

          sc = 1

     else

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

     end

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

end

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

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

          if sc <= 0.1 then --0以下になると画像が消えて復帰しなくなるため0.1未満にならないようにする

          sc = 0.1

          else

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

          end

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

end

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

     ch = (var.recall("choose") or 1) --Nspire変数chooseの値をchに代入

     if ch <= 1 then --chの下限を1とする

          ch = 1

     else

          var.store("choose", ch - 1) --chを1減らしてNspire変数chooseに書き戻す

     end

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

end

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

     ch = (var.recall("choose") or 1) --Nspire変数chooseの値をchに代入

          if ch >= 3 then --chの上限を3とする

          ch = 3

          else

          var.store("choose", ch + 1) --scを1増やしてNspire変数chooseに書き戻す

          end

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

end

 

function on.paint(gc)

     local w = screen:width() --画面の幅をwに代入

     local h = screen:height() --画面の高さをhに代入

     sc = (var.recall("scale") or 0.5) --スライダーscaleの値をscに代入

     ch = (var.recall("choose") or 1) --スライダーchooseの値をchに代入

     if ch == 1 then -- chが1の場合は

          show = sute1 --画像sute1をshowに代入

     elseif ch == 2 then --chが2の場合は

          show = sute2 --画像sute2をshowに代入

     else

          show = sute3 --いずれでもない場合は画像sute3をshowに代入

     end

     local imw = show:width() --画像showの幅をimwに代入

     local imh = show:height() --画像showの高さをimwに代入

     local im = show:copy(sc * imw, sc * imh) --画像showのスケールを変更してimに代入

     local imw = im:width() --スケール変更後の画像imの幅をimwに代入

     local imh = im:height() --スケール変更後の画像imの高さをimhに代入

     gc:drawImage(im, (w - imw)/2, (h - imh)/2) --スケール変更後の画像imを画面中央に描画

end

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

(訳註)今回の実行例。

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