2007年5月22日火曜日

矩形の衝突判定

矩形の衝突判定。そのうち開発Wikiに公開できれば……。
【参考】


// 矩形1と矩形2が衝突しているか(重なっているか)を調べるアルゴリズム。
// 衝突時は必ず「矩形の左上の座標はもう一方の矩形の右下座標よりも左上にある」ことが
// 互いに成立することを利用。
#const global W1 100 // 矩形1の幅(width)
#const global H1 100 // 矩形1の高さ(height)
#const global W2 70
#const global H2 50

#module
// 肝心の衝突判定
#defcfunc hit int x1, int y1, int x2, int y2
    return (x1 < x2 + W2)&(y1 < y2 + H2)&(x2 < x1 + W1)&(y2 < y1 + H1)
#global

    x1 =   0 : y1 =   0
    x2 = 200 : y2 = 100

*main
    redraw 0
    color 255255255 : boxf

    stick key, 15 + 64

    if key & 64 {
        x2 += ((key >> 2) & 1) - (key & 1)
        y2 += ((key >> 3) & 1) - ((key >> 1) & 1)
    } else {
        x1 += ((key >> 2) & 1) - (key & 1)
        y1 += ((key >> 3) & 1) - ((key >> 1) & 1)
    }

    color 255
    boxf x1, y1, x1 + W1, y1 + H1
    color 0255
    boxf x2, y2, x2 + W2, y2 + H2

    if(hit(x1, y1, x2, y2)){
        title "衝突"
    } else {
        title "..."
    }

    redraw 1
    wait 1
    goto *main

0 件のコメント: