*foul dy=y if jf=0 & ff=0 & map((x+1)/32,y/32+1)=0 & map((x+11)/32,y/32+1)=0 { //足場がない。 ff=1:dy=double(dy):dy+=double(gr):fcnt=0.0 } if ff=1 & jf=0 { dy+=double(gr+fcnt):fcnt+=0.25 } dy=int(dy) if map((x+1)/32,(dy+1)/32)=0 { if map((x+11)/32,(dy+1)/32)=0 { if map((x+1)/32,(dy+23)/32)=0 { if map((x+11)/32,(dy+23)/32)=0 { y=limit(dy,0,ginfo_winy-24) }else:ff=0 }else:ff=0 } } dy=y dy=double(dy) return
これは、開発中アクションゲームのキャラクター落下処理のスクリプトを抜き出したものなのですが、
実は、このルーチンで落下させた場合、時々主人公が浮いてしまうのです。
(つまり、落下したとき、床にぴったりくっつくのではなく、4ピクセル程度浮いてしまうということ。)
何か対策はないのでしょうか?
資料
・変数の概要
ff:落下しているかのフラグ
jf:ジャンプしているかのフラグ
dy:Y座標のチェック用座標(移動量を加算したもの)
map:全体のマップを表します。
gr:重力 落ちる速度に影響
fcnt:落ち始めてからのフレーム数 落ちる速度に影響
・今までに実験した対策(いずれも失敗)
地面に着地したかを判定して、着地しているなら、地面と自分の間の空間のYを自分のYに加算
>地面に着地したかを判定して
の段階で失敗してるようです。