我已经有了我的分类掩码设置,希望正确,但我下面的代码应该有我的子弹和敌人的联系,然后删除对方。什么都没有发生,它们只是碰撞,仍然停留在屏幕上。
func didBeginContact(联系人: SKPhysicsContact!) {
firstBody: SKPhysicsBody!secondBody: SKPhysicsBody!如果contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { firstBody = contact.bodyA secondBody = contact.bodyB },则{ firstBody = contact.bodyB secondBody = contact.bodyA } if (firstBody.categoryBitMask & bulletCategory) != 0& (secondBody.categoryBitMask & enemyCategory) != 0{destroyEnemy!SKSpriteNode,敌人: secondBody.node as!} SKSpriteNode) }destroyEnemy(子弹: SKSpriteNode,敌人: SKSpriteNode) { bullet.removeFromParent() enemy.removeFromParent() }
enemy.physicsBody?.categoryBitMask = CollisionTypes.enemy.rawValue
enemy.physicsBody?.contactTestBitMask = CollisionTypes.bullet.rawValue
enemy.physicsBody?.collisionBitMask = CollisionTypes.bullet.rawValuebullet.physicsBody?.categoryBitMask = CollisionTypes.bullet.rawValue bullet.physicsBody?.contactTestBitMask = CollisionTypes.enemy.rawValue bullet.physicsBody?.collisionBitMask = CollisionTypes.enemy.rawValue
发布于 2021-10-13 10:24:26
就其本身而言,这并不是一个回答,但要发表评论有点长:
在您的didBegin中有:
if (firstBody.categoryBitMask & bulletCategory) != 0 &&
(secondBody.categoryBitMask & enemyCategory) != 0 {
destroyEnemy(bullet: firstBody.node as! SKSpriteNode, enemy: secondBody.node as! SKSpriteNode)如果firstBody是敌人,secondBody是子弹怎么办?当接触发生时,将运行的代码似乎不会触发。如果没有看到您的categoryBitMask定义,我们将不知道,因为您似乎在按categoryBitMask值的升序分配第一体和第二主体。
您可以确认这是否与if块内的另一个if一起工作。
我从来没有真正喜欢过这种形式的didBegin,我个人觉得这种风格更容易读懂:
func didBegin(_ contact: SKPhysicsContact) {
print("didBeginContact entered for \(String(describing: contact.bodyA.node!.name)) and \(String(describing: contact.bodyB.node!.name))")
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case bulletCategory | enemyCategory:
print("bullet and enemy have contacted.")
let bulletNode = contact.bodyA.categoryBitMask == bulletCategory ? contact.bodyA.node : contact.bodyB.node
let enemyNode = contact.bodyA.categoryBitMask == enemyCategory ? contact.bodyA.node : contact.bodyB.node
destroyEnemy(bullet: bulletNode, enemy: enemyNode)
case playerCategory | enemyCategory:
// Handle player/Enemy collisions
default:
print("Some other contact occurred")
}https://stackoverflow.com/questions/69534385
复制相似问题