前の日記のプログラムをいじくりまわす。
そして宣言通りミシャグジ様(風)弾幕が完成。
弾の挙動をどのようにして制御するか悩んでいたのですが、
弾クラスのコンストラクタにLua関数オブジェクトを渡し、
そのLua関数に弾クラス自身の参照を渡すことにより解決。
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
ほとんどいじっていないので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をゲームに組み込めるようにしたいです。