首页 > 解决方案 > 在设备上运行时不出现 SKEmitterNode

问题描述

在过去的几天里,我一直在使用 Hacking With Swift 教程(特别是 Project 23)学习在 Swift 中使用 Spritekit。我正在学习如何使用 SKEmitterNodes 但它们似乎从未出现过。在运行时,屏幕是空白的灰色,以 1 fps 的速度运行,屏幕上有 1 个节点(假设是 SKEmitterNode)。我试过改变节点的 zPosition 但它似乎没有任何效果。奇怪的是,SKSpriteNodes 和 SKLabelNodes 看起来还不错。我清理了项目并删除了 GameScene.sks 中的“Hello World”,所以我知道它与默认项目无关。我已经广泛搜索了这个问题的答案,但我已经空白了。下面是有问题的代码。

    import SpriteKit
    import GameplayKit

class GameScene: SKScene, SKPhysicsContactDelegate {
         override func didMove(to view: SKView) {
        //backgroundColor = UIColor.black

        if let starfield = SKEmitterNode(fileNamed: "Starfield.sks") {
        starfield.position = CGPoint(x: 1024, y: 384)
        starfield.advanceSimulationTime(10)
        addChild(starfield)
        starfield.zPosition = 0
        }

编辑:好的,我已经解决了。事实证明,当您尝试以编程方式专门添加一个 SKEmitterNode 时,Xcode 不喜欢它(与它似乎可以正常处理的 SKSpriteNodes 相反)。我必须去做的是进入 GameScene.sks 并手动添加我的 Starfield.sks 文件,然后将其重命名为 Starfield。然后我必须进入 GameScene.swift 文件并通过在 didMove 函数中使用以下代码来挂钩我放置在 GameScene.sks 编辑器中的 SKEmitterNode:

starfield = childNode(withName: "Starfield") as? 
SKEmitterNode

现在新代码如下所示:

var starfield: SKEmitterNode!

 override func didMove(to view: SKView) {
    backgroundColor = UIColor.black

    starfield = childNode(withName: "Starfield") as? 
    SKEmitterNode
    starfield?.position = CGPoint(x: 1024, y: 384)
    starfield?.advanceSimulationTime(10)
    starfield?.zPosition = -1
    }

我在本教程的帮助下找到了这个解决方案

标签: iosswiftsprite-kit

解决方案


查看代码并在 Xcode 中尝试它,似乎它可能没问题....它在我的身上运行良好,但我的粒子发射器分布广泛,几乎看不到......

尝试将 x 位置更改为屏幕中间:512。

这是将发射器定位到屏幕上不可见的部分导致问题的原因。

您也可以调整点差以使其从该位置可见,但您说您是新手,最可能的原因是 x 位置放置。

编辑:

好的,您似乎只是忘记了创建粒子。只需点击 File < New < File 然后点击 SpriteKit Particle Emmitter,选择你想要的模板,最后确保你给粒子的名字和你在代码中命名的名字一样,反之亦然。


推荐阅读