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

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 論打磚塊游戲中的碰撞檢測

    發表于: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.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>