1. 程式人生 > >遊戲中的碰撞(二)

遊戲中的碰撞(二)

           在上一篇中我們瞭解了遊戲中矩形與矩形,圓形與原型的碰撞,而在本篇中,我們則來研究點與矩形,

點與圓形的碰撞,點與點。本節在遊戲中的應用主要是在於判斷點選按鈕,判斷子彈相撞等等方面的應用。

(一)點與矩形的碰撞

 

       如圖片中的點與矩形,我們可以看出點與矩形的3種位置關係。點在矩形內,點在矩形上,點在矩形外。

在遊戲中的應用一般用來判斷點是否在矩形內。

       座標系統仍然沿用上一節的座標系統,假設矩形的左上角的座標為(x1,y1),橫向寬度為w,縱向高度為h,點的座標為(x2,y2)。同android,windows的螢幕座標系統一樣,我們假設左上角為原點(0,0),橫向向右為x軸正向,縱向為y軸正向。

       判斷一個點是否在 矩形內,就需要判斷點的x座標是否大於或等於x1,小於等於x1+w,y座標是否大於y1,小於y1+h.

bool collision(int x2, int y2, int x1, int y1, int w, int h)
{
	if (x2 >= x1 && (x2 <= x1 + w) && y2 >= y1 && (y2 <= y1 + h))
		return true;
	return false;
}

       (二)點與圓形的碰撞

     

      如圖片中的點與圓形,與矩形一樣,點與圓形的位置關係有3種,分別為點在圓形上,點在圓形外,點在圓形內。

在遊戲中檢測碰撞則為檢測點是否在圓形內。

     假設圓形座標原點為(x1,y1),半徑為r,點的座標為x2,y2

     那麼判定一個點是否在圓形內,就需要判定點與座標原點的距離是否大於圓形的半徑,如果大於圓形的半徑,那麼就沒有沒在圓形內部,相反則在圓形內部,則依據2點之間的距離公式,我們有sqrt(pow(x1-x2,2),pow(y1-y2,2))>r。不過,考慮到開平方付出的實際代價比較大的問題,我們只需要比較平方即可。

(三)點與點的碰撞

        假設點a座標為(x1,y1),點b座標為(x2,y2)

        判定這2點是否相撞則極為簡單,只需判定2點是否重合即可,即如果x1=x2,並且y1=y2,那麼這2點即重合,也就是這2點發生了碰撞。

bool collision(int x1, int y1, int x2,int y2)
{
	if (x1==x2&&y1==y2)
		return true;
	return false;
}