在视图控制器中添加火花粒子精灵

Adding a spark particle sprite inside a view controller

我根据 spark 模板创建了一个 .sks 粒子发射器。 我的应用程序是普通应用程序(不是游戏)。当用户单击一个按钮时,我有一个新的视图控制器,它以模态方式显示 over fullscreen 以便我可以模糊背景。

在这个模式中,我创建了一个 view 并给它一个 class 的 SCNView 见下图:

如何加载粒子 .sks 文件以在 Particles 视图上的 viewController 上制作动画?

更新 如何在视图控制器中加载 SceneKit 粒子系统?

.sks 文件是 SpriteKit 粒子系统。您还可以在 Xcode 中创建 SceneKit 粒子系统,它们是 .scnp 个文件。

.scnp 文件基本上是一个存档的 SCNParticleSystem,您可以使用 NSKeyedUnarchiver 加载它并使用 -addParticleSystem:withTransform:.

添加到场景中

如@mnuages 所述,您可以使用 .scnp 文件而不是 .sks,这是一个 SceneKit 粒子系统。

所以步骤是:

  1. 创建一个SceneKit粒子系统,我称之为ConfettiSceneKitParticleSystem.scnp
  2. 然后在你的画板上,select 视图和 select class SCNView 就像在问题的打印屏幕中一样
  3. 在你的UIViewController中:

    class SomeVC: UIViewController {

    @IBOutlet weak var particles: SCNView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let scene = SCNScene()        
        let particlesNode = SCNNode()
        let particleSystem = SCNParticleSystem(named: "ConfettiSceneKitParticleSystem", inDirectory: "")
        particlesNode.addParticleSystem(particleSystem!)
        scene.rootNode.addChildNode(particlesNode)
        particles.scene = scene
    }
    

    }

Et Voila...你有动画 :)

创建 SpriteKit 粒子文件(您就是这样做的)可能更容易。您可以将它添加到 UIViewController 的主视图中。

在某处添加:

extension SKView {
 convenience init(withEmitter name: String) {
  self.init()

  self.frame = UIScreen.main.bounds
  backgroundColor = .clear

  let scene = SKScene(size: self.frame.size)
  scene.backgroundColor = .clear

  guard let emitter = SKEmitterNode(fileNamed: name + ".sks") else { return }
  emitter.name = name
  emitter.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2)

  scene.addChild(emitter)
  presentScene(scene)
 }
}

使用:

 override func viewWillAppear(_ animated: Bool) {

  view.addSubview(SKView(withEmitter: "ParticleFileName"))

}