原典:
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では、これまでに学んだことすべてを用いてダイナミック・モデルを作成します。
----------------------------------------------------------
(訳註)今回の実行例(色を少し変えてある)