Ios 将contactTestBitMask分配给<;设置>;

Ios 将contactTestBitMask分配给<;设置>;,ios,sprite-kit,set,collision,bitmask,Ios,Sprite Kit,Set,Collision,Bitmask,在SpriteKit中,我希望将contactTestBitMask值分配给一组值 这是正常的方式: sprite.physicsBody?.contactTestBitMask = ColliderType.goal.rawValue | ColliderType.greyBox.rawValue 这意味着当我的精灵与这些碰撞器类型接触时,它会通知我。 然而,我的问题是,我的碰撞器类型将在游戏过程中动态变化,并且sprite contactTestBitMask也需要改变。我正在考虑使用集合

在SpriteKit中,我希望将contactTestBitMask值分配给一组值

这是正常的方式:

sprite.physicsBody?.contactTestBitMask = ColliderType.goal.rawValue | ColliderType.greyBox.rawValue
这意味着当我的精灵与这些碰撞器类型接触时,它会通知我。 然而,我的问题是,我的碰撞器类型将在游戏过程中动态变化,并且sprite contactTestBitMask也需要改变。我正在考虑使用集合碰撞器类型,并指定不同的集合和适当的时间:

sprite.physicsBody?.contactTestBitMask = SetManager.sharedSetManager.normalSet 
在SetManager类中:

    enum NormalColliderType:UInt32 {
    case greyBox = 0
    case enemy = 2
    case goal = 4
    case coin = 8
    }

var currentSet: Set<Int> = []

var normalSet: Set<UInt32> = [NormalColliderType.greyBox.rawValue | NormalColliderType.goal.rawValue]

static let sharedSetManager = SetManager()
enum NormalColliderType:UInt32{
case greyBox=0
案例敌人=2
案例目标=4
箱子硬币=8
}
var currentSet:Set=[]
var normalSet:Set=[NormalColliderType.greyBox.rawValue | NormalColliderType.goal.rawValue]
静态let sharedSetManager=SetManager()
从理论上讲,这是可行的,但我收到的唯一错误是: “无法将“Set”类型的值分配给“UInt32”类型”
我想我是在问如何将集合用作变量,因此
normalSet
的类型可以是
UInt32
,您可以这样存储它

var normalSet: UInt32 = NormalColliderType.greyBox.rawValue | NormalColliderType.goal.rawValue

contactTestBitMask
的类型为,因此
normalSet
的类型可以是
UInt32
,您可以将其存储为

var normalSet: UInt32 = NormalColliderType.greyBox.rawValue | NormalColliderType.goal.rawValue

不要忘记,您可以使用按位and和NOT运算符设置和清除特定类别的单个碰撞位和接触位,而不会影响任何其他位:

关闭特定触点(或碰撞):

与目标的精灵接触将不再被通知

打开特定的触点/触点:

   sprite.physicsBody?.collisionBitMask |= ColliderType.newItem.rawValue

sprite现在将与
新项目发生冲突

不要忘记,您可以使用按位and和NOT运算符设置和清除特定类别的单个冲突位和接触位,而不会影响任何其他位:

关闭特定触点(或碰撞):

与目标的精灵接触将不再被通知

打开特定的触点/触点:

   sprite.physicsBody?.collisionBitMask |= ColliderType.newItem.rawValue

sprite现在将与
newItem

冲突。您可以向
enum
添加一个
greyBoxAndGoal
大小写,值为5(
greyBox
应该是1而不是0)。您可以向
enum
添加一个
greyBoxAndGoal
大小写,值为5(
greyBox
应该是1而不是0)。若要添加此项,我将创建一个UInt32字典,这样您就不会创建大量变量。让collisionTypes=[UInt]();collisionTypes[“normalSet”]=NormalColliderType.greyBox.rawValue | NormalColliderType.goal.rawValue;为了补充这一点,我将创建一个UInt32字典,这样您就不会创建大量变量。让collisionTypes=[UInt]();collisionTypes[“normalSet”]=NormalColliderType.greyBox.rawValue | NormalColliderType.goal.rawValue;对于简单的更改,我会采用这种方法(一次只更改一个类别),但对于多类别交换,我会像其他答案一样预定义集合,以避免在交换类别时出错。对于简单的更改,我会采用这种方法(一次只更改一个类别),但对于多类别交换,我会像其他答案一样预先定义集合,以避免在交换类别时出错。