首页 > 解决方案 > 移植 C# 代码。这是对全局对象的引用吗?

问题描述

我正在尝试将Aether.Physics2D库从 C# 移植到 Xojo。这本质上是 Farseer 物理引擎的调整版本。大部分都完成了,但有一部分源代码我无法解决(可能是因为 C# 不是我的主要语言)。

Dynamics/Contacts/Contact.cs中有多个对看起来像全局碰撞对象的引用,但我找不到它的定义。例如,在第 405 行,在switch

case ContactType.Polygon:
  Collision.Collision.CollidePolygons(ref manifold, (PolygonShape)FixtureA.Shape, ref transformA, (PolygonShape)FixtureB.Shape, ref transformB);
  break;

我已经移植了Collision该类及其CollidePolygons静态方法(在此处定义),但为什么这段代码不只是:

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电话?

任何帮助是极大的赞赏。

标签: c#physics-enginefarseer

解决方案


不,那只是因为它是在名为Collision的命名空间中调用的类Collision

namespace tainicom.Aether.Physics2D.Collision
{
    public static class Collision
    {
    }
}

如果您仍然要移植代码,我强烈建议您修复这个错误

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任何地方使用。


推荐阅读