作者最近在寫一個 2D 的類似《打磚塊》的小 游戲 ,由于是新手,在設計碰撞檢測時遇到一些困難,于是上網搜索資料??墒钦垓v了半天也沒有找到詳細的介紹?,F將自己苦想出來的方法貼出來,共大家參考。 問題涉" name="description" />

論打磚塊游戲中的碰撞檢測

發表于:2007-04-28來源:作者:點擊數: 標簽:游戲測試碰撞論打磚塊檢測
MI LY: 華文宋體; mso-bidi-font-size: 10.5pt"> 作者最近在寫一個 2D 的類似《打磚塊》的小 游戲 ,由于是新手,在設計碰撞檢測時遇到一些困難,于是上網搜索資料??墒钦垓v了半天也沒有找到詳細的介紹?,F將自己苦想出來的方法貼出來,共大家參考。 問題涉
MILY: 華文宋體; mso-bidi-font-size: 10.5pt">

作者最近在寫一個2D的類似《打磚塊》的小游戲,由于是新手,在設計碰撞檢測時遇到一些困難,于是上網搜索資料??墒钦垓v了半天也沒有找到詳細的介紹?,F將自己苦想出來的方法貼出來,共大家參考。

問題涉及兩個對象:Ball and Brick。

描述如下:

 

clearcase/" target="_blank" >ccff; MARGIN: auto 6.75pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-table-lspace: 9.0pt; mso-table-rspace: 9.0pt; mso-table-anchor-vertical: paragraph; mso-table-anchor-horizontal: margin; mso-table-left: left; mso-table-top: -.9pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 align=left border=1>

struct Ball

{

       int X;

       int Y;

       int Radius;

       int dx;

int dy;

}

 

struct Brick

{

       int X;

       int Y;

       int Width;

       int Height;

}

 

X、Y是球或磚塊的中心

相對于背景坐標

                                                  

 

 

 

 

 

 

 

根據小球撞擊磚塊的各種可能性,建立如圖坐標系。

             

令外圍矩形的長寬分別為WIDTHHEIGHT  。

float WIDTH = Brick.Width + 2 * Ball.Radius;

float HEIGHT = Brick.Height + 2 * Ball.Radius;

 

設小球中心在圖示坐標系中的坐標為(x,y),則

float x = Ball.X – Brick.X;

float y = Ball.Y – Brick.Y;

 

大矩形被對角線分成1、2、3、4四個區域,可近似認為小球球心位于哪個區域就是碰撞的磚塊的哪個面。所以,當球心與原點連線與X軸夾角的絕對值小于θ時,小球碰撞垂直表面;大于θ時,碰撞水平表面。代碼如下:

float tan = HEIGHT / WIDTH;//tanθ的值

 

if(x == 0)//x=0時,tanθ→∞

{

       Ball.dy = -Ball.dy;

}

else if (tan > abs(y / x))  //1、3區域

{

       Ball.dx = -Ball.dx;

}

else  //2、4區域

{

       Ball.dy = -Ball.dy   

}

 

 

此方法在我看來復雜度還不算高,希望對大家有所幫助。本文絕對原創,由于作者是菜鳥,錯誤難免,歡迎高手指正。



原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97