我在游戏中使用Farseer作为物理,并且有几个关键类:Planet
和PlanetProp
。每个行星都有一个大的圆形体和一个“场”。该区域是身体周围的大型传感器。 PlanetProps被拉向他们目前所在的行星领域(一个名为PlanetInfo的结构)。所以我在PlanetProp
中设置了一个碰撞处理程序,它将(在被调用时)检测它碰撞的夹具是否是传感器。
然后我计划A)检测传感器是否属于Planet
和B)将PlanetProp
设置为拉向行星
换句话说,是否可以使用碰撞回调来访问类,该回调是来自该类中的实体的夹具?
编辑:这是否涉及UserData?如果我使用C ++,我可以在其中放置一个指向该类的指针,但我正在使用c#。
答案 0 :(得分:0)
在C#中,您有“引用类型”和“值类型”。使用class
关键字创建引用类型。使用struct
关键字创建值类型。 (Extended explanation on MSDN。)
如果您有Planet myPlanet
,则引用(例如“class Planet
”变量)与指针非常相似。它需要相同的空间(32位或64位,具体取决于您的体系结构)和“指向”(引用)引用类型的实例 。与指针不同,你不能对它们进行算术运算,这就是垃圾收集器可以做它的事情并跟踪仍被引用的对象(因此它们不被收集)。
因此,您可以将UserData
设置为行星对象的实例。它将引用同一个对象,并且不会复制。
如果您有值类型(即:struct Planet
),则会有不同的故事。分配时会复制它。 (实际上,在这种情况下,因为UserData
的类型为object
并且需要引用类型 - 框架将通过将其复制到不可变引用类型来“封装”您的值类型。)
就我个人而言,我觉得它很有用 - 特别是在你关心内存的游戏开发时 - 使用不同的语法高亮颜色作为参考类型和值类型。