luaのテーブルが美味しい

nil
記事: 428
登録日時: 14年前

luaのテーブルが美味しい

投稿記事 by nil » 12年前

GRAMさんがありがたくもluabindドキュメントの全訳を公開してくださったのでそれとにらめっこしながら
前の日記のプログラムをいじくりまわす。
そして宣言通りミシャグジ様(風)弾幕が完成。
弾の挙動をどのようにして制御するか悩んでいたのですが、
弾クラスのコンストラクタにLua関数オブジェクトを渡し、
そのLua関数に弾クラス自身の参照を渡すことにより解決。

CODE:

pos = Vector2( 320, 240 );

movement = {
	function( bullet )
		if 30 < bullet.count and bullet.count < 30+90 then
			bullet.speed = bullet.speed -1.2/90;
			bullet.angle = bullet.angle + 1;
		end
	end,

	function( bullet )
		if 30 < bullet.count and bullet.count < 30+90 then
			bullet.speed = bullet.speed -1.2/90;
			bullet.angle = bullet.angle - 1;
		end
	end
};

function update()
	if barrage.count%90 == 0 then
		r =getRand( 360 );

		for i=1, 2 do
			for j=1, 60 do
				barrage:createBullet( pos, 360*j/60 + r, 2.0, 0, movement[i] );
			end
		end
	end
end
[album]560[/album]
ほとんどいじっていないのでC++のコードは割愛。
スクリプト自体は龍神録の丸パクりですがテーブルと無名関数の組み合わせはなかなかに凶悪。これは(・∀・)イイ!!
そういえば前に気が付かなかったことをば。
Luaのfor文は
for i=begin, end, step(省略可) do end
みたいな書き方なのですが
これはCで言うところの
for( i=begin; i<=end; i+=step ){ }
にあたります。

なので,
for i=0, 10 do
みたいな事をしてしまいますと
forの中身は11回実行されてしまうんですよね。
というのもLuaは一般常識と同じで数字は1から数えることが前提になっているんだとか。
テーブルも配列として扱うときは1から順に数値が代入されていきます。
気をつけないと…………。

ある程度のことはできるようになったので弾幕はこの程度にしておいて
次はLuaをゲームに組み込めるようにしたいです。
最後に編集したユーザー nil on 2013年1月26日(土) 18:16 [ 編集 2 回目 ]

コメントはまだありません。