Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使粒子系统只受SceneKit中某些类别的物理场的影响?_Swift_Ios8_Scenekit - Fatal编程技术网

Swift 使粒子系统只受SceneKit中某些类别的物理场的影响?

Swift 使粒子系统只受SceneKit中某些类别的物理场的影响?,swift,ios8,scenekit,Swift,Ios8,Scenekit,在SceneKit中,可以通过给SCNPhysicsField提供categoryBitMasks使SCNPhysicsBody不受SCNPhysicsField的影响,当使用位和进行比较时,结果为零。 与字段的值相比,类别位掩码产生的值不为零值仍受其影响 是否可以对SCNParticleSystem中的粒子执行相同的操作,以使粒子不受SCnPysisField的影响(编辑:并且粒子仍受其他物理场的影响),但某些物理体或甚至其他粒子系统受其影响 澄清: 我想要的:受SCnParticleSfi

在SceneKit中,可以通过给
SCNPhysicsField
提供
categoryBitMask
s使
SCNPhysicsBody
不受
SCNPhysicsField
的影响,当使用位和进行比较时,结果为零。 与字段的值相比,类别位掩码产生的值不为零值仍受其影响

是否可以对
SCNParticleSystem
中的粒子执行相同的操作,以使粒子不受
SCnPysisField
的影响(编辑:并且粒子仍受其他物理场的影响),但某些物理体或甚至其他粒子系统受其影响


澄清:

我想要的:受
SCnParticleSfield
影响的
SCNParticleSystem
(特别是线性重力场)。这可以通过将粒子系统的
affectedByPhysicsFields
属性设置为true来实现。但是,这将使粒子系统受到场景中所有物理场的影响。我还有另一个场(也是一个线性重力场),我只想影响
SCNPhysicsBody
,我不想受粒子系统场的影响

目前,粒子系统和物理体都将受到这两个场的影响。除非我给他们categoryBitMasks告诉他们要与哪些字段交互。除了粒子系统没有categoryBitMask之外,如果物理场的categoryBitMask不是默认值,则任何粒子都会忽略它

所以我可以设置它,使其中一个字段仅通过赋予它们相同的类别来影响身体。但是我不能对粒子做同样的事情。有没有办法做到这一点?(将“世界重力”用作其中一个场不起作用,因为它也没有categoryBitMask。)

实际上,我已经找到了一个解决办法(目前),只使用粒子系统的加速度特性,而不是物理场。但我很想知道,用物理场是否真的有可能做到这一点


编辑:根据要求,这里有一些示例代码。这个代码导致一个球体受到两个物理场的影响,一个粒子系统受到一个物理场的影响。这些评论解释了这个问题

let PhysicsCategorySphere = 1 << 0
let PhysicsCategoryParticles = 1 << 1

scene.physicsWorld.gravity = SCNVector3(x: 0, y: 0, z: 0)

let sphere = SCNNode(geometry: SCNSphere(radius: 1))
sphere.physicsBody = SCNPhysicsBody.dynamicBody()
sphere.physicsBody?.categoryBitMask = PhysicsCategorySphere
//only physics fields with categoryBitMasks that match the sphere's can affect it
scene.rootNode.addChildNode(sphere)

let field = SCNPhysicsField.linearGravityField()
field.strength = 9.8
field.direction = SCNVector3(x: 0, y: 1, z: 0)
field.categoryBitMask = PhysicsCategorySphere
//only things with categories that match the field's will be affected by it
let fieldNode = SCNNode()
fieldNode.physicsField = field
scene.rootNode.addChildNode(fieldNode)

let particleSystem = SCNParticleSystem(named: "particles", inDirectory: "")
particleSystem.affectedByPhysicsFields = true
//there is no way that I know of to give the particle system a physics category
let particleNode = SCNNode()
particleNode.addParticleSystem(particleSystem)
scene.rootNode.addChildNode(particleNode)

let particleField = SCNPhysicsField.linearGravityField()
particleField.strength = 20
particleField.direction = SCNVector3(x: 0, y: 0, z: 1)
//particleField.categoryBitMask = PhysicsCategoryParticles
//if the field is given a category, it will no longer affect the particles
//the default is to match all categories, thus the particle field will also affect the sphere
let particleFieldNode = SCNNode()
particleFieldNode.physicsField = particleField
scene.rootNode.addChildNode(particleFieldNode)

让physicCategorySphere=1好吧,我不知道我是怎么忽略了这一点的,但答案在
SCNPphysisField
categoryBitMask
属性的文档中是正确的

确定场是否影响由场生成的粒子的步骤 SCNParticleSystem对象,SceneKit使用 包含粒子系统的节点的categoryBitMask属性


是什么阻止了你们尝试它?尝试什么?你们描述的,物理场中的粒子。只是很快在一个测试项目中设置了它,即粒子系统+物理体和两个场。我确实试过了,但无法让它工作。这就是我来这里的原因。请参阅我对问题的编辑。C您可以发布您使用的实际代码吗?这有什么帮助?它看起来像是SCNParticleSystem的节点正在对照SCNParticleSystem(自身)检查是否具有相同的categoryBitMask。。。我认为这是不可能没有的。
SCNParticleSystem
SCNNode
正在对照
scnpysisfield
categoryBitMask
属性检查它的
categoryBitMask