在设备上运行时不会出现SKEmitterNode

时间:2018-06-15 17:15:06

标签: ios swift sprite-kit

过去几天我使用Hacking With Swift教程(特别是Project 23)学习在Swift中使用Spritekit。我正在学习如何使用SKEmitterNodes,但它们似乎并没有出现过。在运行时,屏幕是一个空白的灰色,以1 fps运行,屏幕上有1个节点(据称是SKEmitterNode)。我尝试过更改节点的zPosition但它似乎没有任何效果。奇怪的是,SKSpriteNodes和SKLabelNodes看起来很好。我清理了这个项目并摆脱了#Hello; Hello World"在GameScene.sks中,所以我知道它不是默认项目中的任何内容。我已经广泛搜索了这个问题的答案,但我还是空白了。以下是违规代码。

    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
    }

我在this教程

的帮助下找到了这个解决方案

1 个答案:

答案 0 :(得分:1)

查看代码并在Xcode中进行尝试,看起来它可能没问题......它在我的运行正常,但我的粒子发射器有很大的扩散,几乎看不到......

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

它是将发射器定位到屏幕的一部分,而不是可见的导致问题。

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

编辑:

好吧,你似乎忘记了创建粒子。 只需点击文件<新<文件然后单击SpriteKit Particle Emmitter,选择您想要的模板,最后确保您给粒子的名称与您在代码中命名的名称相同,反之亦然。