|
1.ジャンプ動作をさせる
if (wY== 1 && getkey(32)==1) {vy=-7;jmp=1;}
//下の壁に接していて、スペースが押されたらジャンプする
*wYが1(自機がブロックの上に乗っているという意味)で、スペースキーが
押された時、ジャンプの処理を行います。(wYはWallHit_chk()というメソッドで、
自機がいる位置により、値が決定されます)
*vy=-7で自機のY方向の速度を-7にし、jmp=1でジャンプ中であることを示す
フラグを立てます。
2.重力の影響をつける
if (wY== 0) {if($map.getAt(x,y)==$pat_block+1){vy+=0.4;}}
//上下とも壁がなく、自機が空中にいれば速度を0.4足す
*ジャンプしたままでは自機がずっと上に移動するだけになるので、自機が
空中にいる場合は常にY方向の速度を0.4ずつ足しつづけます。
右歩行の時のWallHit_chk()に以下の変更が加えてあります。
・Y方向の判定 : ジャンプの要素が加わったため
・1方向に対し2点で判定 : めり込みの防止
(例)上壁判定の場合

上の場合、判定点1はブロックに当たっていない状態ですが、
判定点2は当たっていることになります。
複数の点を調べることで、エッジギリギリのところでのジャンプ、着地などで起こるめり込み状態を回避しています。上方向だけでなく、左右下方向についても2点でチェックしています。
|