2013-01-10 49 views
1

首先,我有一個簡單的類,Line;C#/ XNA Line矩形碰撞/響應

public class Line 
{ 
    public Vector2 P1 = Vector2.Zero; 
    public Vector2 P2 = Vector2.Zero; 

    public Line(Vector2 p1, Vector2 p2) 
    { 
     P1 = p1; 
     P2 = p2; 
    } 
} 

遊戲中所有行的列表,以及我的小精靈邊界矩形。我試圖找出這個矩形底部中間是否低於它直接在上面的那一行上的點,並將它更新到它所在的那一行上的點。這張照片可能會幫助你理解我的意思; enter image description here

矩形向下移動,通過它的交點,然後相應地更新。

有關如何去做這件事的任何想法?我可以很容易地找到它上面的那條線,但是我不知道如何獲得它上面的線,並且避免它在這點之上下降。

代碼示例或引用將是偉大的。

+0

盒子是否總是處於相同的方位或是否可以以任何角度落下? – lzcd

+0

只是一個側面說明:你應該非常*疲倦於做點或線對象的碰撞響應。浮點精度問題存在巨大的潛力。考慮使用實體形狀(矩形,三角形等)。 –

+0

** @ Izcd:**它是一個軸對齊的矩形,不旋轉。 ** @安德魯:**好吧,我正在爲我的遊戲創建一個更有機的編輯器,似乎很多編輯使用'線條'來確定它們的碰撞。像這樣一個例子:[Dust:AET Editor](http://www.gamasutra.com/db_area/images/feature/180520/dustaet_03_large.jpg)。如何實現這樣的碰撞? – kikigreydragon

回答

0

如果你知道線的端點位置,那麼以y = mx + c的形式得到那條線的方程是非常簡單的。然後你需要找到該矩形底部的中點 - 看到XNA矩形給出了它的高度,寬度和中心點位置,這也是微不足道的。從那裏,你得到你的矩形中心點的x座標,用y = mx + c方程計算出當前你的直線的y座標。然後你只需要檢查矩形的底部中心是否在該點以下,如果是,使用矩形的高度值來計算y座標上方多遠,你需要放置矩形使其看起來像坐在該線。應該很簡單。

+0

啊,有人終於回答了!好極了。是的,我知道這與中心點和斜坡攔截有關,但也許我只是需要有人爲我拼寫。我會稍微嘗試一下並回復你。 – kikigreydragon