0

我想重写 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 
}
4

0 回答 0