「LaputanBlueprintsでLUAを活用してみる」の編集履歴(バックアップ)一覧はこちら
「LaputanBlueprintsでLUAを活用してみる」(2012/03/11 (日) 00:19:54) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
まずは基本形。
--コメントアウトはハイフン二つ
function OnFrame()
--毎フレームごとに実行される処理
end
function OnInit()
--シミュレーション開始時やリセット(Uキー)ごとに実行される処理
end
function OnReset()
--その場リセット(Rキー)ごとに実行される処理
end
----
画面に文字を表示してみる。
function OnFrame()
--毎フレームごとに実行される処理
lb.drawtext(32,32,"Welcome to Laputan Blueprints world!")
--lbライブラリのdrawtext関数を呼び出すというJavaちっくな書き方。
--32,32が座標、三つ目の引数が表示する文字。
--この書き方だと決まった文字しか表示できない。
end
function OnInit()
--シミュレーション開始時やリセット(Uキー)ごとに実行される処理
end
function OnReset()
--その場リセット(Rキー)ごとに実行される処理
end
----
なんらかの処理の結果を表示してみる。
function OnFrame()
--毎フレームごとに実行される処理
lb.drawtext(32,32,"Welcome to Laputan Blueprints world!")
lb.drawtext(32,52,string.format("FPS=%.2f",lb.getfps()))
--今度はstring.format関数で文字列を整形してみる。普通の言語でいうとsprintf的な役割
--「FPS=」は通常の文字でそのまま表示されるが、「%.2f」に次の引数の内容が入る。
--%fで小数点付き、%dで小数点無しに整形して表示される。
--%4dと数字を書くと0004や0100のように必ず4ケタになるように整形される。
--%4.1fと小数点をつけて書くと0000.1や0030.0のように小数点以下の桁数が調整される。
--string.format("%d %d",10,20)と書くと前の%dから順に10、20が代入される。
end
function OnInit()
--シミュレーション開始時やリセット(Uキー)ごとに実行される処理
end
function OnReset()
--その場リセット(Rキー)ごとに実行される処理
end
----
変数の値を取得する。
function OnFrame()
--毎フレームごとに実行される処理
lb.drawtext(32,32,string.format("Control1=%.2f",lb.controls.Control1.getvalue()))
--変数の値を取得するには
--lb.controls.変数名.getvalue()
--を使う。こういうところはjavaと同じ。
end
function OnInit()
--シミュレーション開始時やリセット(Uキー)ごとに実行される処理
end
function OnReset()
--その場リセット(Rキー)ごとに実行される処理
end
----
変数に値を設定する。
function OnFrame()
--毎フレームごとに実行される処理
lb.drawtext(32,32,string.format("Control1=%.2f",lb.controls.Control1.getvalue()))
lb.controls.Control1.setvalue(0);
--変数の値を設定するには
--lb.controls.変数名.setvalue(値)
--を使う。今回は値に定数0を入れたのでControl1は0から動かせなくなった。
end
function OnInit()
--シミュレーション開始時やリセット(Uキー)ごとに実行される処理
end
function OnReset()
--その場リセット(Rキー)ごとに実行される処理
end
----
速度を取得する。
function OnFrame()
--ローカル変数は「local 変数名」で宣言できる。
local vel = lb.objects.Box1.getvelocity()
--lb.objects.オブジェクト名.getvelocity()でオブジェクトの速度とか取得できる。
--ただ、このままだと使いづらいので次の行でそれぞれのベクトルを展開をする。
local spd = math.sqrt(vel.x*vel.x+vel.y*vel.y+vel.z*vel.z)*3.6
--vel.xやvel.yでそれぞれの軸の速度が取得できる。
--math.sqrt(数値)のように、算術関数が利用できる。このsqrtは平方根。
--三平方の定理より、xy=√(x^2+y^2)、xyz=√(xy^2+z^2)=√(√(x^2+y^2)^2+z^2)=√(x^2+y^2+z^2)である。
--メートル毎秒なので3.6を掛けて時速に変換する。
--たとえば速度によってウイングを展開する場合
lb.controls.wing.setvalue(spd)
--とすると1km/hあたり1度の割合でウイングの角度が変化する。
--R31のGTオートスポイラーみたいに一定速度で展開、格納のような処理を行うときはif文を使う。
if (spd>=80 and lb.controls.wing2.getvalue()<20) then
--速度が80km/h以上かつwing2が20以下の時のみ下の処理を実行する
lb.controls.wing2.setvalue(lb.controls.wing2.getvalue()+1)
--展開する
end
if (spd<=60 and lb.controls.wing2.getvalue()>0) then
lb.controls.wing2.setvalue(lb.controls.wing2.getvalue()-1)
--格納する
end
end
function OnInit()
--シミュレーション開始時やリセット(Uキー)ごとに実行される処理
end
function OnReset()
--その場リセット(Rキー)ごとに実行される処理
end
表示オプション
横に並べて表示:
変化行の前後のみ表示: