【问题标题】:Adding a spark particle sprite inside a view controller在视图控制器中添加火花粒子精灵
【发布时间】:2015-12-26 05:37:51
【问题描述】:

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

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

如何加载粒子.sks 文件以在@​​987654329@ 视图上的那个viewController 上执行动画?

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

【问题讨论】:

    标签: ios swift animation uiviewcontroller scenekit


    【解决方案1】:

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

    所以步骤是:

    1. 创建一个SceneKit粒子系统,我称之为ConfettiSceneKitParticleSystem.scnp
    2. 然后在你的画板中,选择视图并为它选择类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...你有你的动画:)

    【讨论】:

    • 非常有帮助的帖子!但苹果确实删除了 scnp 文件。 sks 文件的任何解决方法?
    【解决方案2】:

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

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

    【讨论】:

    • 您能不能详细解释一下?这是我第一次使用 Scenekits/spriteKits...仍然迷茫和困惑。
    • 好的,我创建了一个.scnp,如何将它加载到我的视图控制器中的SCNView 中?
    【解决方案3】:

    创建一个 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"))
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-21
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多