如何在 Swift 中将碰撞位掩码设置为 SceneKit 中的 `all`

问题描述 投票:0回答:1

我需要将一个SCNNode的

collisionBitMask
设置为默认值,这都是位设置的。

事实证明这非常棘手,以下是我迄今为止的研究:

collisionBitMask
Int
类型(不是
UInt
)!

默认值为all(每一位都启用的位掩码),指定物体将与所有其他类别的物体发生碰撞。

然后点击链接,我们有:

静态变量全部:SCNPhysicsCollisionCategory { get }

SCNPhysicsCollisionCategory
doc,我们知道rawValue是一个
UInt

我无法直接将

UInt
转换为
Int
因为我会失去精度:

toyUI.physicsBody?.collisionBitMask = Int(SCNPhysicsCollisionCategory.all.rawValue)

我收到此错误:

Swift/Integers.swift:3687:致命错误:没有足够的位来表示传递的值

ios swift scenekit
1个回答
0
投票

尝试像这样设置:

toyUI.physicsBody?.collisionBitMask = Int.max

SCNPhysicsCollisionCategory.all.rawValue
(如
UInt
)启用所有 64 位。
Int.max
还将除符号位之外的所有位都设置为1,这足以表示“所有类别”。

© www.soinside.com 2019 - 2024. All rights reserved.