gpt4 book ai didi

swift - 添加到新的 SKScene 时 SKEmitterNode 消失

转载 作者:可可西里 更新时间:2023-11-01 01:23:00 25 4
gpt4 key购买 nike

我有一个 SKEmitterNodeSKScene 上运行我想把它移到下一个 SKScene不打断粒子。

通常我会这样做:

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

然后在下一个 SKScene 上:

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 之间的过渡的情况下让它工作。非常感谢任何帮助,谢谢。

注意:使用 SKTransition持续时间为 0 也可以,但这会在过渡期间导致明显的“闪光”。

最佳答案

不应该有任何闪光之类的。如果我理解正确的话,您需要做的是在全局范围内创建一个发射器。在呈现下一个场景之前,您应该从其父级移除发射器。当您在下一个场景中时,您可以向其中添加发射器。我刚刚尝试过,它对我有用,没有任何滞后、闪烁或其他问题。

这是代码...有两个场景...一个GameScene:

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)
}
}
}

和一个WelcomeScene:

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)
}

}
}

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com