Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Farseer从OnCollision访问类_C#_Box2d_Physics_Farseer - Fatal编程技术网

C# Farseer从OnCollision访问类

C# Farseer从OnCollision访问类,c#,box2d,physics,farseer,C#,Box2d,Physics,Farseer,我在一个游戏中使用Farseer进行物理,有几个关键类:Planet和PlanetProp。每颗行星都有一个巨大的圆形天体和一个磁场。该区域是身体周围的一个大型传感器。PlanetProps被拉向它们当前在一个名为PlanetInfo的结构中的行星场。因此,我在PlanetPro中设置了一个碰撞处理程序,每当调用它时,它都会检测它碰撞到的夹具是否是传感器 然后我计划A检测传感器是否属于行星,B将PlanetProp设置为拉向行星 换句话说,是否可以从类中的主体使用带有夹具的碰撞回调来访问类 编辑

我在一个游戏中使用Farseer进行物理,有几个关键类:Planet和PlanetProp。每颗行星都有一个巨大的圆形天体和一个磁场。该区域是身体周围的一个大型传感器。PlanetProps被拉向它们当前在一个名为PlanetInfo的结构中的行星场。因此,我在PlanetPro中设置了一个碰撞处理程序,每当调用它时,它都会检测它碰撞到的夹具是否是传感器

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

换句话说,是否可以从类中的主体使用带有夹具的碰撞回调来访问类

编辑:这是否涉及用户数据?如果我使用C++,我可以在这个类中放一个指针,但是我在C中使用C.< /P>

,你有引用类型和值类型。引用类型是使用class关键字创建的。值类型是使用struct关键字创建的

一个引用,例如Planet myPlanet变量(如果您有类Planet),与指针非常相似。它占用相同的空间32位或64位,具体取决于您的体系结构,并指向引用类型的实例。与指针不同的是,您不能对它们执行算术运算,因此垃圾收集器可以完成它的工作,并跟踪哪些对象仍然被引用,因此它们不会被收集

因此,将UserData设置为planet对象的实例是非常安全的。它将引用同一对象,并且不会制作副本

如果你有一个值类型,即:struct Planet,情况就不同了。当您分配它时,它将被复制。实际上,在本例中,由于UserData是object类型,并且需要引用类型,因此框架将通过将其复制到不可变的引用类型中来装箱您的值类型


就我个人而言,我发现使用不同的语法突出显示参考类型和值类型的颜色是很有帮助的,尤其是在你关心内存的游戏开发中。

我不想把整个地球放在它的身体的用户数据中,因为它有一个大的图像。我完全不知道这种情况。非常感谢,这将使事情变得非常简单。引用不必是指针,并且与指针大小相同。Microsoft的CLR实现使用指向GC管理的对象表中的项的实际指针是一个实现细节。另一个实现可能会选择使用整数索引,因此引用的大小可能与指针的大小不同,例如在像Win64这样的LLP64操作系统上。@hristoilev技术上是正确的。但即使在这种情况下,将它们概念化为指针,并在实践中将其视为指针也是合理的。