檢查Vector2是否在矩形內的最佳方法是什麼?XNA - 檢查Vector2是否在矩形內
myRect.contains(myVector2)不起作用,因爲它需要一個Point或一個Rectangle。
我知道我可以將Vector2投射到一個點或者甚至是一個尺寸爲1/1的矩形,但我不確定性能。
你有什麼經驗?
檢查Vector2是否在矩形內的最佳方法是什麼?XNA - 檢查Vector2是否在矩形內
myRect.contains(myVector2)不起作用,因爲它需要一個Point或一個Rectangle。
我知道我可以將Vector2投射到一個點或者甚至是一個尺寸爲1/1的矩形,但我不確定性能。
你有什麼經驗?
雖然可能有額外的執行時間鑄造VS創造一個像點(myVector2.X,myVector2.Y)點,其意義是最有可能太小了,你有沒有注意到(一般應避免過早優化)
與任何看起來最乾淨和更容易維護。如果是我,我可能只是在方法調用中創建新點...
您也可以編寫擴展方法。
public static Point Origin(this Vector2 v)
{
//original proposal
//return new Point((int)v.X, (int)v.Y);
//better! does correctly round the values
return new Point(Convert.ToInt32(v.X), convert.ToInt32(v.Y));
}
然後,你可以做這樣的事情rect.Contains(vec.Origin)
東西要記住,雖然:這種方法實際上不會檢查矢量包含於矩形,如果原產地是這樣只會檢查。請記住,矢量方向爲和。
對於Rectangle
結構,Contains
的一個重載版本採用X和Y座標。
Rectangle rect = new Rectangle(-5, -5, 10, 10);
Vector2 myVector2 = Vector2.Zero;
rect.Contains((int)myVector2.X, (int)myVector2.Y)
我假設你說的是代表點而不是距離或方向的myVector2
。
不,我使用Vector2來存儲位置。這不可能是一個點!如果它是一個點,相應對象的翻譯(移動)將不會平滑。 – SwissCoder
你已經除外的答案需要一個Vector2,轉換爲一個Point,然後檢查矩形。我的方法跳過轉換爲一個點的步驟。我沒有看到問題。如果一個點不是你想要的,那麼你爲什麼接受你使用一個點的答案。我不確定誰在這裏,我或你更困惑。特別是當你剛纔說你使用Vector2來存儲一個位置時,這使得它成爲一個Point。如果你想根據矩形檢查這個位置,我的方法就像你要找的那樣高效。 –
因爲Rectangle.Contains接受整數而不是浮點數,所以需要將X和Y轉換爲int。 –
@SwissCoder完成。 –
這個四捨五入的表現與鑄造不一樣。但是當我玩遊戲時,我什麼也沒注意到。 – SwissCoder
爲什麼當矩形有一個Contains方法時需要使用自定義函數? – xus