LaputanBlueprintsでLUAを活用してみる


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

まずは基本形。

--コメントアウトはハイフン二つ
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
|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|