レトロゲームの製作プラットフォームpico8の備忘録。
リンク
コードスニペット
障害物判定ありの移動
障害物(フラグ0オンのマップチップ)を避けて移動する関数moveの定義。
※ chrはフィールドx,yを持つテーブル。
※ キャラクタは8x8ドット。一度に8ドット以上移動した場合はすり抜ける場合あり
-- move
function move(chr,vx,vy)
movex(chr,vx)
movey(chr,vy)
end
-- move x
function movex(chr,v)
-- dont move
if v==0 then
return
end
-- corner position
local x=chr.x
if v>0 then
x+=7
end
-- check block
local block=checkblock(x+v,chr.y ) or
checkblock(x+v,chr.y+7)
if block then
chr.x=flr(x/8)*8
else
chr.x+=v
end
end
-- move y
function movey(chr,v)
-- dont move
if v==0 then
return
end
-- corner position
local y=chr.y
if v>0 then
y+=7
end
-- check block
local block=checkblock(chr.x ,y+v) or
checkblock(chr.x+7,y+v)
if block then
chr.y=flr(y/8)*8
else
chr.y+=v
end
end
-- check block
function checkblock(x,y)
local col=(x)/8
local row=(y)/8
local mval=mget(col,row)
return fget(mval,0)
end