我正在尝试将Aether.Physics2D库从C#移植到Xojo。这实质上是Farseer物理引擎的经过调整的版本。基本上已经完成了,但是源代码中有一部分我无法解决(可能是因为C#不是我的主要语言)。
在Dynamics/Contacts/Contact.cs中,有多个对看起来像全局Collision对象的引用,但我找不到它的定义。例如,在switch
中的第405行:
case ContactType.Polygon:
Collision.Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);
break;
我已经移植了Collision
类及其CollidePolygons
静态方法(定义为here),但是为什么这段代码不仅仅如此:
Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);
代替:
Collision.Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);
从本质上讲,为什么会有两个 Collision
个呼叫?
非常感谢您的帮助。
答案 0 :(得分:3)
不,这仅仅是因为它是名为Collision
的命名空间中的名为Collision
的类:
namespace tainicom.Aether.Physics2D.Collision
{
public static class Collision
{
}
}
如果您仍在移植代码,强烈建议您fix this mistake。
您还可以使用using
指令更改调用代码:
using Collision = tainicom.Aether.Physics2D.Collision.Collision;
...
// Calling the method is simpler now
Collision.CollidePolygons(...);
您可能想为别名提供一个不同的名称,
// TODO: Think of a better name to use :)
using CollisionClass = tainicom.Aether.Physics2D.Collision.Collision;
...
CollisionClass.CollidePolygons(...);
这样,名称Collision
根本不会改变其含义,但是您无需在任何地方使用Collision.Collision
。