我想重写 didBeginContact 函数,以便在场景中的两个物理对象发生碰撞时实现自定义逻辑。
我了解如何在 Swift 中完成此操作,首先将联系委托设置为场景对象本身,然后设置 didBeginContact 函数,如下所示:
self.physicsWorld.contactDelegate = self
func didBeginContact(contact: SKPhysicsContact) {
//logic goes here
}
在 C# 中将 SpriteKit 与 Xamarin 一起使用时,我无法弄清楚如何实现这样的系统。我尝试创建一个自定义的 Contact Delegate 类,它是 SKPhysicsContactDelegate 的子类,并将场景的 PhysicsWorld.ContactDelegate 属性设置为此类的一个实例,但是在运行我的应用程序时我没有注意到任何变化。
public class CollisionDelegate : SKPhysicsContactDelegate
{
public override void DidBeginContact(SKPhysicsContact contact)
{
if (contact.BodyA.CategoryBitMask == 1 &&
contact.BodyB.CategoryBitMask == 3)
{
contact.BodyB.Node.RemoveFromParent();
}
else if (contact.BodyA.CategoryBitMask == 3 &&
contact.BodyB.CategoryBitMask == 1)
{
contact.BodyA.Node.RemoveFromParent();
}
}
}
然后在我的 SKScene 课程中:
public override void DidMoveToView(SKView view)
{
PhysicsWorld.ContactDelegate = new CollisionDelegate();
//Other scene initilaisation
}