頭との当たり判定

矩形を表示して当たり判定チェック PICO-8
矩形を表示して当たり判定チェック

PICO-8でスネークゲームをつくっています。

今回は、ヘビとカエルの当たり判定の一部を実装しました。

矩形を表示して当たり判定チェック
矩形を表示して当たり判定チェック

ヘビとカエルの当たり判定は、矩形をチェックするだけなので、難しくはなかったのですが、蛇の体を長くすることが、面倒でした。

当たり判定をして、キャラクタ分を長くするコード

for frog in all(frogs) do
 if (coll(frog,st[sl*8])) then
   del(frogs,frog)
   local x_inc=0 local y_inc=0
   if (st[1].d==0) x_inc=-1
   if (st[1].d==1) x_inc= 1
   if (st[1].d==2) y_inc=-1
   if (st[1].d==3) y_inc= 1
   local table={}
   for i=8,1,-1 do
      local e={x=st[1].x+x_inc*(9-i),
               y=st[1].y+y_inc*(9-i),
               box={x1=1,y1=1,x2=6,y2=6},
               d=st[1].d}
      add(table,e)
   end
   for e in all(st) do
     add(table,e)
   end
   st=table
   sl+=1
 end
end

衝突チェック関数

function coll(a,b)

 local box_a=abs_box(a)
 local box_b=abs_box(b)

	if box_a.x1 > box_b.x2 or
		 box_a.y1 > box_b.y2 or
		 box_b.x1 > box_a.x2 or
		 box_b.y1 > box_a.y2 then
		 return false
	end
	return true
end

当たり判定矩形を座標系へ変換する関数

function abs_box(s)
	local box={}
	box.x1=s.box.x1+s.x
	box.y1=s.box.y1+s.y
	box.x2=s.box.x2+s.x
	box.y2=s.box.y2+s.y
	return box
end

配列を逆にして管理しているので、先頭の部分に新しい要素を入れなければいけません。

頭から尻尾と配列の順番が逆なので、紙にメモしながら、コードを書いていきました。

でも、なんとか頑張って実装できましたので、結果を動画など見てください。

ヘビの頭とカエルの当たり判定
ヘビの頭とカエルの当たり判定

次は、カエルとヘビの体の部分を実装したいと思います。

これは、当たり判定の応用なので、楽だと(?)思います。

コメント

タイトルとURLをコピーしました