Luaレッスン8.2「実際に使ってみる」和訳

原典:

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

 レッスン8.2「実際に使ってみる」

まずはシンプルなボックスから始めましょう。ボックスの大きさは100 × 50ピクセルとします。位置は、ウィンドウの左上、座標(10, 10)とします。

 

function drawBox(x, y, length, height, gc)

     gc:drawRect(x, y, length, height)

end

function on.paint(gc)

     gc:setColorRGB(165,42,42)

     gc:setPen("medium", "smooth")

     drawBox(10, 10, 100, 50, gc)

end

 

単純にon.paint函数の中にgc:drawRectコマンドを配置しても良いのですが、上記のようにすると、もっと簡単にボックスがカスタマイズできます。ボックスをウィンドウの中央に配置してみましょう。前に行ったように、ウィンドウの高さおよび幅は、利便性を考えて変数として定義します。定義した変数でボックスを表現します。ボックスの寸法を制御することもできます。たとえば、ボックスの高さをウィンドウの高さの1/4にし、ボックスの幅をボックスの高さの2倍にしてみましょう。ボックスが中央に来るかどうか確認してください。

 

local screen = platform.window

function drawBox(x, y, length, height, gc)

     gc:drawRect(x, y, length, height)

end

function on.paint(gc)

     local w = screen:width()

     local h = screen:height()

     gc:setColorRGB(165,42,42)

     gc:setPen("medium", "smooth")

     drawBox(w/2 - h/4, 3*h/8, h/2, h/4, gc)

end

 

今度は、同じ寸法のボックスをウィンドウの中央に横に並べてみましょう。さらに別々の色にしてみます。色で塗りつぶしてください。drawBox函数内のdrawRectコマンドは、fillRectコマンドに変更してください。

 

local screen = platform.window

function drawBox(x, y, length, height, gc)

     gc:fillRect(x, y, length, height)

end

function on.paint(gc)

     local w = screen:width()

     local h = screen:height()

     gc:setColorRGB(165,42,42)

     gc:setPen("medium", "smooth")

     drawBox(w/2, 3*h/8, h/2, h/4, gc)

     gc:setColorRGB(255,165,0)

     drawBox(w/2 - h/2, 3*h/8, h/2, h/4, gc)

end

 

さいごに、各ボックスの中に円を描いてみましょう。円が見やすくなるよう、drawBox函数内のfillRectはdrawRectに戻してください。

 

local screen = platform.window

function drawBox(x, y, length, height, gc)

     gc:drawRect(x, y, length, height)

end

function on.paint(gc)

     local w = screen:width()

     local h = screen:height()

     gc:setColorRGB(165,42,42)

     gc:setPen("medium", "smooth")

     drawBox(w/2, 3*h/8, h/2, h/4, gc)

     gc:fillArc(w/2, 3*h/8 , h/4, h/4, 0, 360)

     gc:fillArc(w/2 + h/4, 3*h/8 , h/4, h/4, 0, 360)

     gc:setColorRGB(255,165,0)

     drawBox(w/2 - h/2, 3*h/8, h/2, h/4, gc)

     gc:fillArc(w/2 - h/4, 3*h/8 , h/4, h/4, 0, 360)

     gc:fillArc(w/2 - h/2, 3*h/8 , h/4, h/4, 0, 360)

end

 

課題:前のチュートリアルで行ったように今度は、グラフ・ウィンドウにポイントを設置し、そのポイントに変数をリンクして、その変数に各ボックスの位置をリンクしてみてください。そうすれば、グラフ・ウィンドウ内でポイントをドラッグしたときに、Luaウィンドウ内でボックスがドラッグされます。また、スケール変数を挿入して、ボックスの寸法を変えることもできます。この問題に対する1つのアプローチとして、今回のレッスン用のダウンロード・ファイルに含まれているLuaスクリプトを確認してください。

レッスン9、レッスン10では、これまでに学んだことすべてを用いてダイナミック・モデルを作成します。

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

(訳註)今回の実行例(色を少し変えてある)

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