【问题标题】:SpriteKit didEndContact not being calledSpriteKit didEndContact 没有被调用
【发布时间】:2016-10-20 14:01:10
【问题描述】:

在我的didEndContact: 方法中,我增加了一个“currentScore”。

由于某种原因,didEndContact: 没有被调用,因此“currentScore”没有增加。任何想法为什么或我应该寻找什么来调试这个?

func didEndContact(contact: SKPhysicsContact) {
    guard goal!.barEnabled else { return }
    score += 1
}

这是相关代码,如果我也可以添加任何其他有用的细节,请告诉我:

var barEnabled:Bool {
    set {
        bar?.physicsBody?.collisionBitMask = newValue ? CollisionMask.Puck : CollisionMask.None
        bar?.physicsBody?.categoryBitMask = newValue ? CollisionMask.Goal : CollisionMask.None
    }
    get {
        return bar?.physicsBody?.collisionBitMask == CollisionMask.Puck
    }
}

【问题讨论】:

  • 您是在 didEndContact 发生之前从场景中移除精灵吗?因为那时它不会被调用
  • @Knight0fDragon 是的,因为这个原因我检查了:stackoverflow.com/questions/29331799/…,但感谢您与我仔细检查

标签: swift xcode sprite-kit skphysicscontact


【解决方案1】:

为了检测冲突,您必须设置 contactTestBitMaskphysicsBody

当对两个整数应用二进制与运算以触发检测时,physicsBodyscontactTestBitMask 和另一个 physicsBodyscategoryBitMask 必须不为 0。

如果您还没有,请确保场景的physicsWorld.contactDelegate 设置为self,并且它实现了SKPhysicsContactDelegate

【讨论】:

  • 双重检查我有physicsWorld.contactDelegate = self,并且场景实现了SKPhysicsContactDelegate,所以看起来不错,感谢您解释检测冲突,这样我就可以检查我是否在做位掩码零件也是。
  • 我需要更多的上下文来弄清楚为什么它仍然不起作用。
  • 我现在确实让它工作了,所以我标记了答案,但忘了添加评论。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多