所以基本上,我正在做我的第一個xna遊戲,它是一個打磚塊遊戲。我的球現在是一個旋轉的正方形。與旋轉矩形的碰撞
不幸的是,無法正確檢測xna中旋轉矩形的碰撞。
我發現約標量的事情,但我只在計算機科學在大學,所以我不知道這些大數學做...
誰能告訴我在檢測到這些類型的碰撞的正確方法嗎?或者至少能夠以正確的方式獲得一個新的矩形,以便我可以檢測到這個碰撞?
編輯 我只是想在靜止的廣場上製作我的旋轉廣場,並測試與外部廣場的碰撞會是可行的嗎?
所以基本上,我正在做我的第一個xna遊戲,它是一個打磚塊遊戲。我的球現在是一個旋轉的正方形。與旋轉矩形的碰撞
不幸的是,無法正確檢測xna中旋轉矩形的碰撞。
我發現約標量的事情,但我只在計算機科學在大學,所以我不知道這些大數學做...
誰能告訴我在檢測到這些類型的碰撞的正確方法嗎?或者至少能夠以正確的方式獲得一個新的矩形,以便我可以檢測到這個碰撞?
編輯 我只是想在靜止的廣場上製作我的旋轉廣場,並測試與外部廣場的碰撞會是可行的嗎?
如果您想檢測方形球與外部矩形的碰撞,您需要知道球的四個角的座標。然後簡單地將這些點與外部矩形進行比較。如果s
是矩形邊的長度。角落可以這樣計算:
double h = 0.707106781 * s; // Half diagonal
double angle = rotation_angle + 0.25 * Math.PI; // 0.25 * Math.PI = 45 degrees
// inclination of the diagonal.
double x = h * Math.Cos(angle);
double y = h * Math.Sin(angle);
// The four points are
p1x = +x + squareCenterX;
p1y = +y + squareCenterY;
p2x = -y + squareCenterX;
p2y = +x + squareCenterY;
p3x = -x + squareCenterX;
p3y = -y + squareCenterY;
p4x = +y + squareCenterX;
p4y = -x + squareCenterY;
你真的想讓你的球成爲一個正方形嗎? 或者一個簡單的圓圈可以做到嗎?
您可以使用碰撞圓來代替,碰撞背後的邏輯比旋轉的方塊簡單得多......(如果你真的想要一個正方形和像素完美的碰撞,不管這個答案和Terrance的評論)
if(circle.Center.X - circle.Radius < ScreenBounds.XMin ||
circle.Center.X + circle.Radius > ScreenBounds.XMax ||
circle.Center.Y - circle.Radius < ScreenBounds.YMin ||
circle.Center.Y + circle.Radius > ScreenBounds.YMax)
{
//Ball is partly or entirely outside of the screen
}
這是不是一個真正的直接回答你的問題,但更多的替代
編輯的:此代碼假定你的球的位置是相對於它的中心。
此外,你可以近似你的旋轉平方與碰撞圈(或事實上,一個非旋轉的方形)的碰撞。碰撞不會像素完美,但我認爲這幾乎不會引人注目。這也將更容易實施(考慮這是你的第一場比賽)。
修改我以前的評論.... http://www.gamedev.net/page/resources/_/technical/game-programming/2d-rotated-rectangle-碰撞r2604 – Terrance
類似的問題http://stackoverflow.com/questions/641219/how-can-i-perform-collision-detection-on-rotated-rectangles?rq=1 – Terrance
這是很好的兩個矩形之間的碰撞,但讓說,我只是想保持屏幕上的矩形... – AntoineLev