スクリプト制作講座 B02
0. Luaの文法2
code:Lua
-- local 変数名 = 値 のようにすると「ローカル変数」を定義できる。
-- ローカル変数、ということはローカルでない変数があるが、ここではまだ触れないことにする
local var1 = 12
print(var1) -- 12
-- = 値 はなくともよい。この場合var2には nil と呼ばれる値が入る。
-- これはnullのような意味であり、型は nil型。
local var2
print(var2) -- nil
-- do ~ end で囲んだ部分は「ブロック」と呼ばれる。
-- ブロックはCの { ~ } と同じような効果を持っている。
-- スクリプト全体は暗黙のブロックのようになっている。
-- あるブロックで宣言されたローカル変数の寿命はそのブロックの終了までである。
do
local var3 = 34
print(var3) -- 34
end
-- ブロックの中で定義されたローカル変数は、ブロックの外では使えない。
-- 存在しない変数名を指定すると、nilになる。
print(var3) -- nil
-- Luaは複数の値に対して一度に代入する方法が存在する。
local var4, var5 = 56, 78
var5, var4 = 123, 456
print(var4, var5) -- 456 123
-- Luaではfor文はこのように書くことになっている。
-- for 変数=開始,終了,間隔=1 do 文 end
for i = 1, 10 do
print(i) -- 1 2 3 4 5 6 7 8 9 10
end
-- 数学系関数は math テーブルによく入っている
print(math.acos(-1)) -- 3.1415926535898
1. 描画
オブジェクトの描画にはobj.draw関数を使う。
code:Lua
obj.draw(100, 200) -- Xに100、Yに200加えた位置に描画
code:Lua
-- X軸方向に複製
for i = 1, 10 do
obj.draw(i * 50)
end
code:Lua
-- 円形配置
local n = 10 -- 個数
local r = 100 -- 半径
for i = 1, n do
local a = i / n * math.pi * 2
obj.draw(r * math.cos(a), r * math.sin(a))
end
obj.drawが呼ばれないスクリプトでは、オブジェクトの最後に暗黙のobj.draw()があると思って良い。
課題
オブジェクトを任意の方向に複製するスクリプトを記述してみよ。
2. 乱数
乱数の生成はLua標準でmath.random関数が存在するが、拡張編集の「あるフレームでの呼び出しで同じ結果を得る」のには不向きである。
そこで代わりにobj.randex関数を使う。
code:Lua
local r=obj.randex(0) -- 乱数を生成する関数を返す
local x=r(-100, 100) -- -100,100の範囲の乱数
local y=r(-100, 100) -- 呼び出す度に値が変わる
obj.draw(x, y)
obj.randexは第2引数を固定することで時間が変わっても結果を固定することができる。
code:Lua
local r=obj.randex(0, 0)
local x=r(-100, 100)
local y=r(-100, 100)
obj.draw(x, y)
課題
ランダム配置を行うスクリプトを記述してみよ。
次 スクリプト制作講座 B03