ブラシスクリプトでは、使用できるLuaの関数が限られているようです。 基本的に、データを読み込むか、加工するだけの関数が使えるようです。 また、すべて記述するのではなく、使用頻度が高そうな関数だけピックアップしていきます。
ラジアンは、円周率を利用して角度を表す単位らしいです。円周率は、math.pi
という変数で取得できます。関数ではないです。 ラジアンは、math.pi*2
で360度と同じになるようです。計算で求めると、以下のようになります。
360度*math.pi/180
。ラジアン*180/math.pi
。しかし、計算で求めなくても、math.rad()
とmath.deg()
という関数で、簡単に求められます。 ()
に値を入れるだけです。math.rad()
でラジアンに、math.deg()
で角度に戻せます。
()
に角度を入れると、サイン・コサインの値が返ってきます。 角度は、ラジアンです。bs_dir()
でベクトルを取得できますが、個別にベクトルを取得したい場合に使うことが多いです。
local dx, dy=bs_dir()
-- bs_dir()と同じような値を求める。lastXとlastYは、前回の座標とする。
local angle=bs_atan(lastX-x, lastY-y)
local dx, dy=math.cos(angle), math.sin(angle)
ひとまずランダムにしたいときは、math.random()
で、0.0~1.0の乱数を得られます。 そして、()
に値を入れると、指定した範囲の乱数を得られます。得られる乱数は、整数(符号つきではなさそう)です。 ちなみに、bs_grand()
はマイナスの値も範囲に含まれます。
-- 0から10の乱数を取得する。開始(0)と終了(10)の間に、コンマを入れる。
local rnd=math.random(0, 10)
-- math.random()とbs_grand()は、乱数の偏りに違いがある。
local rnd=math.random() -- 0.0~1.0の範囲で、直線的。
local rnd=bs_grand() -- -1.0~1.0の範囲で、途中で曲線的。
また、個人的に使用感がないのですが、math.randomseed(数値)
で乱数のパターンを指定できるようです。 同じ数値を指定すれば、同じような乱数のパターンが得られます。 実際は、乱数のパターンをばらつかせるのに、毎回異なる数値を入れることが多いようです。
整数にしたいときは、小数点以下を切り捨てるか、切り上げます。 切り捨てるときは、math.floor()
を使い、切り上げるときは、math.ceil()
を使います。 ()
に、切り捨てか、切り上げをしたい数値を入れます。
-- 四捨五入してみる。
local a=5.4
local b=math.floor(a+0.5) -- 0.5を足すと5.9だが、切り捨てなので、5になる。
-- 切り上げる。次の大きい整数に繰り上がるはず。
local a=5.04
local b=math.ceil(a) -- 5.04が6になる。
幾つかある数値の中で、最も大きい、小さいを求めるときは、math.max()
とmath.min()
を使います。 引数(カッコ内に入れる値)は、可変です。
絶対にプラスの数値にしたいときは、math.abs(数値)
を使います。
テーブルの中身を順に見るには、上記のようにすれば可能ですが、ipairs(テーブル)
という関数を使う方法でも可能です。
テーブルに要素を追加するには、table.insert(対象のテーブル, 対象のテーブルの位置, 要素の値)
という関数を使います。 対象のテーブルの位置を指定すれば、その位置に要素が追加され、テーブル全体の長さが増えます。 位置の指定を略して、table.insert(対象のテーブル, 要素の値)
とした場合、テーブルの最後に追加され、前述と同じく長さが増えます。
a={1, 2, 3}
-- 位置指定ありの場合の結果は、a={1, 4, 2, 3}となる。
table.insert(a, 2, 4)
-- 位置指定なしの場合の結果は、a={1, 2, 3, 4}となる。
table.insert(a, 4)
テーブルに要素を削除するには、table.remove(対象のテーブル, 対象のテーブルの位置)
という関数を使います。 対象のテーブルの位置を指定すれば、その位置にある要素は除かれ、テーブル全体の長さが減ります。 位置の指定を略して、table.remove(対象のテーブル)
とした場合は、テーブルの最後の要素が除かれ、前述と同じく長さが減ります。
a={1, 2, 3}
-- 位置指定ありの場合の結果は、a={1, 3}となる。
table.remove(a, 2)
-- 位置指定なしの場合の結果は、a={1, 2}となる。
table.remove(a)
テーブルの中身を引数にするには、unpacak(テーブル)
という関数を使います。
逆に、引数をテーブルにしたい場合は、{}
で囲みます。 bs_dir()
や、bs_fore()
のような引数が一つ以上のある場合は、以下のようにすれば可能です。
そして、テーブルにしたい関数の引数が可変であった場合も、同じようにします。 可変な引数自体はピリオド3つで表しますので、function name(...)
のようになります。