|
1.キー入力
左右キーを押したときに、自機の向きをかえ、向いた方向に移動するように
します。
if (getkey(37)>=2) {vx=-wsp;f=-1;}
//左キーが押されたら速度を-2に、向きを左にする
*getkey(37)は、左キーが押されたか調べるメソッドです。押しっぱなしの状態で
2を返すようになっています。
*wspは自機の歩行スピードで2が入っています。2ドットずつ移動するという
意味です。
*vxは自機が実際に移動する速度です。向きを考慮しています。
*fは自機のキャラクタ画像の向きです。
2.壁の当たり判定
自機が壁に当たったらそれ以上、向いている方向に行かないようにします。
WallHit_chk(); //壁の判定
if (wX!= 0) vx=0; //壁に接しているなら速度を0にする
*WallHit_chk()では左右の壁の判定を行っています。wXを壁に接しているか
調べる変数として使っており、状況に応じて以下の数値が入ります。
・左の壁に接している場合 : wX=-1
・右の壁に接している場合 : wX= 1
・左右とも壁に接してない場合 : wX= 0
*wXがゼロでない場合は壁にぶつかっているので、速度をゼロにして進行方向に
行かないようにします。
3.移動処理
歩行アニメーションと実際の自機の移動を行います。
if (vx!= 0) anim.swing($pat_chara+0,$pat_chara+2,8);
//↑加速度が0でない(歩行中)なら歩行アニメーション
x+=vx; //自機のX座標に速度を足す
vx=0; //速度を0にする
*移動しているときのみ歩行アニメーションをさせたいので、vxがゼロでないとき
だけアニメーションを行います。
◆WallHit_chk()の説明
(例)左壁判定の場合
wX=0;
if($map.getAt(x-8+vx,y)==$pat_block+0) wX=-1;

判定点X座標 x-8+vx は壁ぎりぎりのところですが、
・左キーが押されるとvxが-2になり、調べる点のパターンが壁($pat_block+0)
になるため、wXに-1が入ります。
・キーが何も押されないとvxが0になり、調べる点のパターンが空間($pat_block+1)
になるため、wXに0が入ります。
|