swift - 防止具有相同 Catagorymask 的 Spritekit 节点发生碰撞

标签 swift sprite-kit collision categories skspritenode

我正在开发这个 Spritekit 项目,其中有一个玩家节点,您可以在屏幕上移动,然后有一些子弹节点向您射击。我的问题是,子弹不仅击中玩家,而且还互相击中。我已经为玩家和子弹提供了自己的类别/碰撞/接触蒙版。

我在这里指定了所有不同的类别掩码(其中一些可以忽略):

enum CategoryMask : UInt32 {
    case playeragain = 11
    case player = 1
    case GBullet = 2
    case BBullet = 3
    case enemyships = 4
    case coin = 5
    case boss = 6
}

BBullet是向你发射的子弹,player是用户控制的节点。

然后我将这些掩码分配给每个节点:

    player.physicsBody?.categoryBitMask = CategoryMask.player.rawValue
    player.physicsBody?.collisionBitMask = CategoryMask.BBullet.rawValue | CategoryMask.coin.rawValue
    player.physicsBody?.contactTestBitMask = CategoryMask.BBullet.rawValue | CategoryMask.coin.rawValue


    bullet.physicsBody?.categoryBitMask = CategoryMask.BBullet.rawValue
    bullet.physicsBody?.collisionBitMask = CategoryMask.player.rawValue
    bullet.physicsBody?.contactTestBitMask = CategoryMask.player.rawValue

子弹和玩家之间的碰撞工作正常,我已经在“Did begin contact”功能中设置了如何处理每次碰撞。我想明确表示我不希望子弹相互碰撞。

最佳答案

它是二进制位掩码。

所以最好使用一些位运算符:

enum CategoryMask : UInt32 {
case playeragain = 0b00000001
case player = 0b00000010
case GBullet = 0b00000100
case BBullet = 0b00001000
case enemyships = 0b00010000
case coin = 0b00100000
case boss = 0b01000000
  }



   // case playeragain = 1<<0 //1
   // case player = 1<<1    // 2
    // case GBullet = 1<<2  // 4
   // case BBullet = 1<<3   //8
   // case enemyships = 1<<4 //16
   // case coin = 1<<5 //32
   // case boss = 1<<6 //64

  //

这应该给你你真正想要的东西。

这是 Apple 文档中的示例,红球会击中地面,而蓝球不会。

    let ground = SKShapeNode()

      redBall.physicsBody?.collisionBitMask = 0b0001
      blueBall.physicsBody?.collisionBitMask = 0b0010
      ground.physicsBody?.categoryBitMask = 0b0001

关于swift - 防止具有相同 Catagorymask 的 Spritekit 节点发生碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54498260/

相关文章:

ios - UITableView使用下载图片时不流畅

ios - 在 Swift SpriteKit 中使用 SKLabelNode 作为父级创建一个按钮

ios - 如何存储电平数据

java - libgdx 中的碰撞检测

安卓和引擎 : handling Collission Detection properly

ios - 尝试仅允许在单个特定行上进行滑动行为

arrays - UISearchbar 并在 View a controller xcode swift 中传递数据

ios - 检测 SceneKit 中粒子和节点之间的碰撞

ios - 显示在 JSQMessagesViewController 中发送的视频的图像预览

ios - 加速度计数据不正确,延迟了几秒钟