移植C#代码。这是对全局对象的引用吗?

时间:2019-04-19 05:18:16

标签: c# physics-engine farseer

我正在尝试将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个呼叫?

非常感谢您的帮助。

1 个答案:

答案 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