Swift 斯威夫特:受物理世界引力的影响?

Swift 斯威夫特:受物理世界引力的影响?,swift,sprite-kit,Swift,Sprite Kit,我试图得到一个受风影响的雨粒子,也就是物理世界引力 我可以看到重力确实对我的SKSpriteNodes有影响,但我不能对SKEmitterNode产生同样的影响 我只是想知道这是否可能 这是我一直在尝试的 override func didMove(to view: SKView) { if let rainParticles = SKEmitterNode(fileNamed: "Rain.sks") { rainParticles.position = CG

我试图得到一个受风影响的雨粒子,也就是物理世界引力

我可以看到重力确实对我的SKSpriteNodes有影响,但我不能对SKEmitterNode产生同样的影响

我只是想知道这是否可能

这是我一直在尝试的

    override func didMove(to view: SKView) {

    if let rainParticles = SKEmitterNode(fileNamed: "Rain.sks") {
        rainParticles.position = CGPoint(x: size.width/2, y: size.height)
        rainParticles.name = "rainParticle"
        rainParticles.targetNode = scene
        rainParticles.particlePositionRange = 
                CGVector(dx: frame.size.width, dy: frame.size.height)
        rainParticles.zPosition = -1

        // I don't think this is right
        rainParticles.physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
        rainParticles.physicsBody?.affectedByGravity = true
        addChild(rainParticles)
    }

    physicsWorld.contactDelegate = self
    // gravity is pushing to the right here
    physicsWorld.gravity = CGVector(dx: 20, dy: 0)
    physicsWorld.speed = 0.85
}
是,我添加了
skphysiccontactdelegate

显然,我想忽略碰撞,所以我没有设置
碰撞位掩码
,也不想让雨水通过
contactTestBitMask
从任何东西上反弹。我认为我不需要设置
类别BitMask

粒子不由SpriteKit中的对象表示。这意味着您不能对粒子执行与节点相关的任务,也不能将物理实体与粒子关联以使其与其他内容交互。尽管没有表示发射器节点添加的粒子的可见类,但可以将粒子视为具有与任何其他对象类似的特性

这直接来自
SKEmitterNode
文档。粒子不会从场景的
physicsWorld
获得任何重力加速度。 另外
rainParticles.physicsBody
指的是SKEmitterNode
physicsBody
,而不是其粒子

如果您只是想让粒子模拟当前
物理世界的重力:

rainParticles.xAcceleration = self.physicsWorld.gravity.dx
rainParticles.yAcceleration = self.physicsWorld.gravity.dy