【问题标题】:How to add and remove a SKErmitterNode within a sequence?如何在序列中添加和删除 SKermitterNode?
【发布时间】:2018-03-25 19:03:11
【问题描述】:

我正在从 update() 函数中添加一个 SKermitterNode。我想在 2 秒后删除 SKermitterNode,因此我制作了一个序列,但在序列中,我无法添加节点。如果我在序列之外添加节点,它会一遍又一遍地添加(因为我在更新函数中执行所有这些操作)有人知道更好的方法吗?

这是我的更新功能代码:

 override func update(_ currentTime: CFTimeInterval) {

    if player.position.y <= player.size.height / 2{

        self.player.removeFromParent()

        if let particles = SKEmitterNode(fileNamed: "MyParticle.sks") {
            particles.position = player.position

            let addParticle = addChild(particles)
            let wait = SKAction.wait(forDuration: 2.0)
            let removeParticle = SKAction.removeFromParent()
            let particleSequence = SKAction.sequence([addParticle, wait, removeParticle]) //Error ->Cannot convert value of type 'Void' to expected element type 'SKAction'
            self.run(SKAction.run(particleSequence))

        }
    }

【问题讨论】:

  • 你想达到什么样的效果?就像玩家爆炸一样?
  • 是的,爆炸。 @sicvayne

标签: swift sprite-kit sequences sknode particles


【解决方案1】:

所以我建议你做的是创建一个类似下面的函数

func myExplosion (explosionPosition: CGPoint){
    let explosion = SKEmitterNode(fileNamed: "MyParticle")// borrowed this from you
    explosion?.position = explosionPosition
    explosion?.zPosition = 3
    self.addChild(explosion!)
    self.run(SKAction.wait(forDuration: 2)){//you can always change the duration to whatever you want
        explosion?.removeFromParent()
    }
}

那么到了该使用这个功能的时候,就这样使用吧

myExplosion(explosionPosition: player.position)

希望这可以帮助你。

【讨论】:

  • 这很有帮助,谢谢,但是因为我在更新函数中有代码,所以 SKermitterNode 会一遍又一遍地添加。我怎么能阻止它? @sicvayne
  • 如果它回答了问题,您可以将其标记为正确。至于更新功能,我建议你弄乱它看看你能找到什么!
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多