【发布时间】:2021-11-30 16:29:31
【问题描述】:
我希望我的 categorybitmasks 设置正确,但我下面的代码应该让我的子弹和敌人接触,然后相互删除。什么都没有发生,它们只是碰撞并仍然停留在屏幕上
func didBeginContact(联系人:SKPhysicsContact!) {
var firstBody: SKPhysicsBody! var secondBody: SKPhysicsBody! if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { firstBody = contact.bodyA secondBody = contact.bodyB } else { firstBody = contact.bodyB secondBody = contact.bodyA } if (firstBody.categoryBitMask & bulletCategory) != 0 && (secondBody.categoryBitMask & enemyCategory) != 0 { destroyEnemy(bullet: firstBody.node as! SKSpriteNode, enemy: secondBody.node as! SKSpriteNode) } } func destroyEnemy(bullet: SKSpriteNode, enemy: SKSpriteNode) { bullet.removeFromParent() enemy.removeFromParent() }
enemy.physicsBody?.categoryBitMask = CollisionTypes.enemy.rawValue
enemy.physicsBody?.contactTestBitMask = CollisionTypes.bullet.rawValue
enemy.physicsBody?.collisionBitMask = CollisionTypes.bullet.rawValue
bullet.physicsBody?.categoryBitMask = CollisionTypes.bullet.rawValue bullet.physicsBody?.contactTestBitMask = CollisionTypes.enemy.rawValue bullet.physicsBody?.collisionBitMask = CollisionTypes.enemy.rawValue
【问题讨论】:
-
“我已经正确设置了我的 categorybitmasks”谁知道呢?
-
你有接到电话吗?您是否忘记设置联系人代表?
-
将 print("didBegin:entered") 作为
didBegin(contact:)的第一行,以便您知道是否有任何联系人正在注册。您是否已完成接触检测所需的所有其他工作? stackoverflow.com/a/51041474/1430420 -
已设置联系人代表。打印后没有任何内容被回调。他们之间肯定有冲突,只是接触后没有注册。
-
您可以确定的一件事是,如果没有调用
didBegin,那么您没有正确设置联系人 - 它永远不会“不起作用”。跨度>
标签: swift sprite-kit