2007年10月01日
オブジェクト同士のあたり判定(その4)
さて、みなさんどうなりましたか?
ここから、ファイルをダウンロードできます。
私は、以下のようなアルゴリズムを考えてみました。
まず移動後の自分の座標と、相手の移動前の座標を比較します。
つまり静止している相手に対して、自分の次の動き(相手への当たり方?)を考えて見ました。
その場合、相手との距離において、2通り考えられます。
まず①、距離がない場合、自分が左にいて、右となりに相手が接触している場合です。
この場合、自分が一つ右に移動すると、相手と丁度マスが重なります。
data.pp(0).hit_f = 0 'hit flag clear
data.pp(0).pos_x = data.p_pos_x '移動したところに、相手(四角)がいた場合
data.pp(0).pos_y = data.p_pos_y
この場合は、重なることはできずに、反対方向へ移動させることになります。
次に②は、相手と丁度重なった状態から、右へ一つ移動した場合です。
この場合は、元の座標に相手がいることになりますので、こちらも当たりとなり、
反対方向に移動しますね。
data.pp(1).hit_f = 0 'hit flag clear
data.pp(1).pos_x = data.p_pos_x + (data.speed_x * -1) '移動した元の場所に、相手(四角)がいた場合
data.pp(1).pos_y = data.p_pos_y + (data.speed_y * -1)
移動後をシミレートして、ひとつ前の座標と比較するので、実は、今の座標です。
ただここでは、2つの座標を新たに生成してから、ループによって比較させて、プログラムの共通化を図っています。
まだ、他の方法もあると思いますので、みなさんも、いろいろ挑戦してみて下さい。
また、このプログラムにもバグはあります。
四角のオブジェクトをいろいろな方向に動かして下さい。
このバグを直せたら、もう一人前かも知れませんよ!
ツイッターはじめました~フォロー待ってま~す!!
↓↓↓下記の3つのバナーをクリックして下さい。ランキングUPにご協力をお願いします。↓↓↓
投稿者 shiozumi : 23:07 | トラックバック (0)