トップページへ
 これ以上簡単に書けないゲーム制作講座
 めり込みを修正する 前のページ   次のページ
なぜブロックにめり込んだ状態で着地するようになるのでしょうか?
自機の座標、(x,y)は32×32ドットの中止にあります。
if ($map.getAt(x,y)==$pat_block+0))という判定文では、「自機座標中心にブロックがあるか?」という判断の仕方になってしまうため、めり込みが生じてしまうわけです。図で書くと下のような関係になります。


ではめり込みを直すにはどうすればいいでしょうか?単純にもう少し上の座標で判定してやればよさそうです。いまは自機中心で判定しているので、16dot上で判定してあげるように変更します。下のような感じにすればよさそうです。


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);
//キャラクタのアニメーション
x=x+1; //右へ1ドット移動
f=1; //右を向く
}
if (getkey(37)>2) { //左のキーが押されたとき
anim.swing($pat_chara+0,$pat_chara+2,12);
//キャラクタのアニメーション
x=x-1; //左へ1ドット移動
f=-1; //左を向く
}

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


プログラムを実行したところです。きれいにめり込みが修正されました。

前のページ   次のページ



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

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