トップページへ
 これ以上簡単に書けないゲーム制作講座
 横方向の壁に当たり判定をつける 前のページ   次のページ
さて、現時点では自機の下方向しか壁に当たったときの判定(当たり判定といいます)を行っていないため、横方向に壁があってもすり抜けてしまいます。下方向と同じようにif文を使って修正してみます。

extends SpriteChar;

/*キャラクタ歩行プログラム
左右のキーを押すとキャラクタが
足踏みしながら移動します。*/

$map.setBGColor(color(0,200,255)); //背景色の変更

p=$pat_chara+0;

anim=newAnimation();

while(1){

anim.pause();
if (getkey(39)>2) { //右のキーが押されたとき
anim.swing($pat_chara+0,$pat_chara+2,12);
//キャラクタのアニメーション
if ($map.getAt(x+16,y)!=$pat_block+0) x=x+1;
//右が壁でないなら右へ1ドット移動

f=1; //右を向く
}
if (getkey(37)>2) { //左のキーが押されたとき
anim.swing($pat_chara+0,$pat_chara+2,12);
//キャラクタのアニメーション
if ($map.getAt(x-16,y)!=$pat_block+0) x=x-1;
//左が壁でないなら左へ1ドット移動

f=-1; //左を向く
}

if ($map.getAt(x,y+16)==$pat_block+0){
//ブロックに当たった場合
vy=0; //落下速度を0にする
y=trunc(y/32)*32+16; //y座標をブロックの上に移動する
} else {
//ブロックに当たっていなかった場合
vy=vy+0.5; //落下速度を上げる
}

y=y+vy;

update();
}


if ($map.getAt(x+16,y)!=$pat_block+0)という文で使われている "!=" は、次の意味があります。
   
if (式1 != 式2) → 式1と式2が等しくないならば
プログラム注釈のとおりですが、この場合なら右に壁がないならばという意味になります。下がプログラムを実行したところです。少しマップを書き換えてみました。左右の壁どちらに当たっても移動がストップします。





前のページ   次のページ



|  トップページ | このサイトについて | 利用規約 | ご意見・お問い合わせ |

TonyuアクションRPG - ゲームプログラミング解説 -