Ios 将contactTestBitMask分配给<;设置>;
在SpriteKit中,我希望将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也需要改变。我正在考虑使用集合
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;对于简单的更改,我会采用这种方法(一次只更改一个类别),但对于多类别交换,我会像其他答案一样预定义集合,以避免在交换类别时出错。对于简单的更改,我会采用这种方法(一次只更改一个类别),但对于多类别交换,我会像其他答案一样预先定义集合,以避免在交换类别时出错。