首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKPhysicsContact不与敌人接触子弹

SKPhysicsContact不与敌人接触子弹
EN

Stack Overflow用户
提问于 2021-10-12 02:22:19
回答 1查看 37关注 0票数 0

我已经有了我的分类掩码设置,希望正确,但我下面的代码应该有我的子弹和敌人的联系,然后删除对方。什么都没有发生,它们只是碰撞,仍然停留在屏幕上。

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() }

代码语言:javascript
复制
    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

EN

回答 1

Stack Overflow用户

发布于 2021-10-13 10:24:26

就其本身而言,这并不是一个回答,但要发表评论有点长:

在您的didBegin中有:

代码语言:javascript
复制
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,我个人觉得这种风格更容易读懂:

代码语言:javascript
复制
  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")
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69534385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档