自機がブロック左側にいる場合を例にとります。
下図で、自機がブロックの赤色部分を押す時の条件を設定するにあたって、
何を知らないといけないか考えてみます。
A. 自機のX座標とブロックのX座標の差
B. 自機のY座標とブロックのY座標の差
C. ブロックに対し、自機が右にいるか、左にいるか
D. 自機が動いているかどうか
AとBについては、差を具体的にどうするか決める必要がありますが、
プログラムを走らせて、動きが自然に見えるように値を設定していきます。
A〜Dがわかれば、自機が赤色部分を押しているかどうか判断できます。
プログラムで表現すると以下のようになります。
if(abs($Mychar.y-y)<blockwidth-5 && $Mychar.x<x &&
abs($Mychar.x-x)<blockwidth-7 && $Mychar.vx>=0)
※blockwidthには32の定数がいれてあります。

◆上記以外の細かな条件設定
・自機が空中にいるときにブロックを押せるのは違和感があるので、
Y方向の移動がない場合にのみブロックを押せる条件をつけます。
if ($Mychar.vy==0) {$Mychar.vx=0 ; if (wY>=1||ld==2)vx=0.3;}
・自機が高スピードで落下すると、ブロックにめり込んではじき出されるので、
この防止を行います。
if ($Mychar.vy< 6) $Mychar.x-=blockwidth-5-abs($Mychar.x-x)-$Mychar.wsp;
|
|
|
|