我在用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