当たり判定でもやってみますか

とりあえず、今プログラムで書いているので、当たり判定のことでも。

とりあえず、当たり判定のやりかたをおさらい。ググったらkenmoさんのページが出てきたので、参照するとよいでしょう(http://d.hatena.ne.jp/kenmo/20050712

矩形(四角形)でやってみる

int IsAtari( RECT* A, RECT* B )
{
    if(   A->left   < B->right
       && A->right  > B->left
       && A->top    < B->bottom
       && A->bottom > B->top  )
    {
        return 1;
    }
    return 0;
}

矩形Aと矩形Bが重なってたら、「当たっている」と判定するやりかた。

円でやってみる

typedef struct _tagAtariEn
{
    int x, y; // 座標
    int r;    // 円の大きさ
}AtariEn;

int IsEndeAtari(AtariEn* A, AtariEn* B)
{
    int X = B->x - A->x;
    int Y = B->y - A->y;
    int R = B->r + A->r;

    if( X*X + Y*Y < R*R )
        return 1;

    return 0;
}

円Aと円Bが重なっていたら、「当たっている」と判定するやりかた。


ま、この2つくらいがメジャーかと。

さてさて、ゲーム中でオブジェクト1個:1個の判定なんてのは殆どなくて、「1個の自機の喰らい判定vsN個(たくさん)の敵の攻撃判定」とか「N個の自弾攻撃vsN個の敵喰らい判定」などと、沢山の数の判定を相手にするのがフツーです。てなわけで、沢山の当たり判定/くらい判定をリストなんかに突っ込んで管理するのが必要になってきますね。

続きはまたこんど。