ios - 如何将 SKEmitterNode 添加到 SKScene(它没有显示)?

标签 ios swift sprite-kit particle-system

我正在尝试将 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/

相关文章:

ios - Swift:如何使viewWillTransition仅影响横向的iPhone

ios - View 框架在运行时不遵守约束

swift - sum.swift :29:19: error: cannot find 'CFAbsoluteTimeGetCurrent' in scope

ios - 添加 subview (标签)时如何实现可调整大小的父高度?

swift - 分配在 SKAudioNode 上运行 play() 时返回的 SKAction?

ios - UILabel:背景相关颜色

iphone - 将 UINavigationBar 移出屏幕但下方区域不可触摸

ios - 在单 View 应用程序中启动场景

ios - 检测三角形按钮网格中的触摸?

swift - 弹跳并提高球的速度