Farseer从OnCollision访问一个类

时间:2013-02-10 12:16:56

标签: c# box2d physics farseer

我在游戏中使用Farseer作为物理,并且有几个关键类:PlanetPlanetProp。每个行星都有一个大的圆形体和一个“场”。该区域是身体周围的大型传感器。 PlanetProps被拉向他们目前所在的行星领域(一个名为PlanetInfo的结构)。所以我在PlanetProp中设置了一个碰撞处理程序,它将(在被调用时)检测它碰撞的夹具是否是传感器。

然后我计划A)检测传感器是否属于Planet和B)将PlanetProp设置为拉向行星

换句话说,是否可以使用碰撞回调来访问类,该回调是来自该类中的实体的夹具?

编辑:这是否涉及UserData?如果我使用C ++,我可以在其中放置一个指向该类的指针,但我正在使用c#。

1 个答案:

答案 0 :(得分:0)

在C#中,您有“引用类型”和“值类型”。使用class关键字创建引用类型。使用struct关键字创建值类型。 (Extended explanation on MSDN。)

如果您有Planet myPlanet,则引用(例如“class Planet”变量)与指针非常相似。它需要相同的空间(32位或64位,具体取决于您的体系结构)和“指向”(引用)引用类型的实例 。与指针不同,你不能对它们进行算术运算,这就是垃圾收集器可以做它的事情并跟踪仍被引用的对象(因此它们不被收集)。

因此,您可以将UserData设置为行星对象的实例。它将引用同一个对象,并且不会复制。

如果您有值类型(即:struct Planet),则会有不同的故事。分配时会复制它。 (实际上,在这种情况下,因为UserData的类型为object并且需要引用类型 - 框架将通过将其复制到不可变引用类型来“封装”您的值类型。)

就我个人而言,我觉得它很有用 - 特别是在你关心内存的游戏开发时 - 使用不同的语法高亮颜色作为参考类型和值类型。