我有一个运行在SKEmitterNode上的SKScene并且我想将它移动到下一个SKScene而不打断粒子。
通常我会这样做:

let scene: SKScene = GameScene(size: self.size)
let transition = SKTransition.crossFade(withDuration: 0.5)
self.view!.presentScene(scene, transition: transition)

然后在下一个场景:
override func didMove(to view: SKView) {
    particleEmitter.removeFromParent()
    addChild(particleEmitter)
}

这非常好,但是在这种情况下,我不想在移动到下一个skscene时使用转换。我试过,但没有过渡,比如:
let scene: SKScene = GameScene(size: self.size)
self.view!.presentScene(scene)

当新的SKEmitterNode出现时,SKScene就会消失,即使我已经将它从上一个SKScene中移除并作为子级添加到新的SKEmitterNode中。
我的问题是,为什么会出现这种情况,我如何才能在不使用skscene之间的转换的情况下让它正常工作。任何帮助都将非常感谢,谢谢。
注意:使用持续时间为0的SKTransition也可以,但这会在转换期间引起明显的“闪光”。

最佳答案

不应该有闪光之类的。如果我正确理解您,您需要做的是在全局范围内创建一个发射器。在展示下一个场景之前,应该从其父场景中移除发射器。当你在下一个场景中时,你将向它添加发射器。我只是试过了,它对我没有任何延迟,闪光或什么。
这里是代码…有两个场景…aGameScene

import SpriteKit

let emitter = SKEmitterNode(fileNamed: "Fireflies")

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        backgroundColor = .black

        if let emitterNode = emitter {

             addChild(emitterNode)
        }
         print("Game Scene")

    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        if let scene = WelcomeScene(fileNamed: "WelcomeScene") {

            scene.scaleMode = .aspectFill

            emitter?.removeFromParent()

            self.view?.presentScene(scene)
        }
    }
}

以及aWelcomeScene
import SpriteKit

class WelcomeScene:SKScene{

    override func didMove(to view: SKView) {

        backgroundColor = .black
         print("Welcome Scene")
        if let emitterNode = emitter {
            addChild(emitterNode)

        }
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        if let scene = GameScene(fileNamed: "GameScene") {

            scene.scaleMode = .aspectFill
            emitter?.removeFromParent()
            self.view?.presentScene(scene)
        }

    }
}

对于发射器,我使用了标准的萤火虫模板。

关于swift - 添加到新SKScene时,SKEmitterNode会消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43025877/

10-11 09:29