我在用XNA BoundingSpheres問題的參考。我想將BoundingSphere添加到BoundingSpheres列表中。目前,它是沿着以下幾條線:添加到列表C#結構
Aircraft(Vector3 pos, float radius, CollisionManager colMan)
{
BoundingSphere sphere = new BoundingSphere(pos, radius);
colMan.AddSphere(sphere)
}
List<BoundingSphere> spheres = new List<BoundingSphere>();
CollisionManager()
{
spheres = new List<BoundingSphere>();
}
AddSphere(BoundingSphere boundingSphere)
{
spheres.Add(boundingSphere);
}
而不是添加引用,它似乎是添加的值。我相信這是因爲boundingSpheres是結構?我怎樣才能解決這個問題?我嘗試了ref關鍵字,但值仍然沒有在列表中更新。
感謝您的回答。我想我會重新設計一下我的Collision Manager。應該只有數量有限的物體具有移動的碰撞盒,所以我希望能夠找到一種不會對性能造成太大影響的方式。 – Bushes
考慮創建一個接口,我們稱它爲'ICollidable',它表示一個可碰撞的對象並將其邊界幾何體作爲一個屬性公開。然後,您可以創建一個可碰撞對象列表,這可能是您想要的,並相應地更新它們。請記住,如果替代方法是堆分配,那麼傳遞大型結構有時可能是有價值的,並且確保在跳到關於其性能的任何結論之前對代碼進行概要分析。 –
@ColeCampbell實際上是我最初的想法。儘管我有同樣的問題。我在名爲CheckCollision(BoundingSphere sphere)的界面中創建了一個檢查衝突方法。碰撞管理器然後會調用這個方法並從列表中傳遞一個球體。通過的球體將是一個副本,但不參考原始的邊界球。我無法真正看到解決這個問題的好方法,它不涉及高耦合。 – Bushes