我正在尝试将 SKEmitterNode 添加到我的游戏场景 (SKScene)。我做了以下但它没有出现:
if let emitter = SKEmitterNode(fileNamed: "Explosion.sks") {
emitter.position = CGPoint(x: 0, y: 0) // center of screen
emitter.name = "boom"
emitter.targetNode = self // setting this makes no difference
emitter.zPosition = 10 // tried higher values also
emitter.particleZPosition = 10 // tried with and without this too
addChild(emitter)
print("NODE ADDED")
}
输出打印“NODE ADDED”但节点无处可见。所有其他节点都正常添加,没有问题。如果我用
交换上面的代码let node = SKShapeNode(rectOf: CGSize.init(width: 50, height: 50))
node.position = CGPoint(x: 0, y: 0)
node.fillColor = SKColor.red
addChild(node)
它按预期工作,我在屏幕中央看到一个红色方 block 。
作为完整性检查,如果我将发射器节点添加为场景中另一个可见节点的子节点,它会显示为另一个节点的子节点:
let node = SKShapeNode(rectOf: CGSize.init(width: 50, height: 50))
node.position = CGPoint(x: 0, y: 0)
node.fillColor = SKColor.red
if let emitter = SKEmitterNode(fileNamed: "Explosion.sks") {
emitter.position = CGPoint(x: 0, y: 0) // center of screen
emitter.name = "boom"
emitter.targetNode = node
node.addChild(emitter)
}
addChild(node)
但我无法将它直接添加到 SKScene 中。我可能会使用一个不可见的父节点来破解它,但这很烦人。我尝试将它包装在 SKEffectNode 中但无济于事。
iOS 10.3、iPhone 7 模拟器、Swift 3
最佳答案
答案很微妙:我的代码中有一个清除方法,可以删除离开屏幕的节点。它在每一帧都被调用:
self.enumerateChildNodes(withName: "*", using: { (node, stop) -> Void in
if !self.intersects(node) {
node.removeFromParent()
}
})
事实证明,SKEmitterNode 永远不会“与”场景“相交”,即使它直接位于场景之上。我最初的解决方案是避免在这些特定节点上运行此检查:
if !self.intersects(node) {
成为
if !self.intersects(node) && !(node is SKEmitterNode) && !(node is SKEffectNode) {
关于ios - 如何将 SKEmitterNode 添加到 SKScene(它没有显示)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330880/