在视图控制器中添加火花粒子精灵
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 粒子系统。
所以步骤是:
- 创建一个SceneKit粒子系统,我称之为
ConfettiSceneKitParticleSystem.scnp
- 然后在你的画板上,select 视图和 select class
SCNView
就像在问题的打印屏幕中一样
在你的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"))
}
我根据 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 粒子系统。
所以步骤是:
- 创建一个SceneKit粒子系统,我称之为
ConfettiSceneKitParticleSystem.scnp
- 然后在你的画板上,select 视图和 select class
SCNView
就像在问题的打印屏幕中一样 在你的
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"))
}