1

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

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

所以换句话说,是否可以使用碰撞回调和来自该类中的主体的固定装置来访问一个类?

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

4

1 回答 1

0

在 C# 中有“引用类型”和“值类型”。引用类型是使用class关键字创建的。值类型是使用struct关键字创建的。(MSDN 上的扩展解释。)

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

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

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

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

于 2013-02-10T14:08:16.253 回答