Farseer从OnCollision访问类



我在游戏中使用Farseer进行物理,并且有几个关键类:PlanetPlanetProp。每颗行星都有一个巨大的圆形天体和一个"场"。这个场是身体周围的一个大传感器。PlanetPops被拉向它们当前所在的行星场(一个名为PlanetInfo的结构)。因此,我在PlanetProp中设置了一个碰撞处理程序,它将(无论何时调用)检测与其碰撞的夹具是否是传感器。

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

换言之,是否有可能使用碰撞回调来访问一个类,该类具有来自该类主体的fixture?

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

在C#中,有"引用类型"one_answers"值类型

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

因此,将UserData设置为行星对象的实例是非常安全的。它将引用相同的对象,并且不会进行复制。

如果您有一个值类型(即:struct Planet),情况就不同了。当你分配它时,它会被复制。(实际上,在这种情况下,因为UserData的类型是object,并且需要一个引用类型——框架会通过将它复制到一个不可变的引用类型来"框"你的值类型。)

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

最新更新