【问题标题】:SKEmitterNode does not appear when running on device在设备上运行时不出现 SKEmitterNode
【发布时间】:2018-06-15 17:15:05
【问题描述】:

在过去的几天里,我一直在学习在 Swift 中使用 Spritekit,并使用 Hacking With Swift 教程(特别是 Project 23)。我正在学习如何使用 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
    }

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

【问题讨论】:

  • 在 didMove、iirc 之后执行。这样做有一个错误
  • 另外,不要添加文件扩展名“sks”
  • 我对 swift 还是很陌生。我会把它放在另一个函数中吗?还是只是在 GameScene 类中?一个例子真的很有帮助。谢谢!
  • 我查看了我的笔记,错误是/正在 init 中执行,而不是 didMove。 Ni Nisan Nijackle有正确答案
  • 更改 zPosition。

标签: ios swift sprite-kit


【解决方案1】:

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

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

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

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

编辑:

好吧,看来您只是忘记创建粒子了。 只需点击 File

【讨论】:

  • 嗯,我试了一下,不幸的是它没有解决问题。
  • 然后给我看完整的 Xcode 项目,我可能会看到你如何调整发射器节点和其他东西。您可以尝试调整发射器节点,但您甚至可能根本没有运行它,请先尝试检查。
  • 使用 0,0 因为那是屏幕的中心
  • 这里是项目的 github repo,如果你们想看看的话。 github.com/DoctorSpock/space-race
  • 您只是忘记将粒子添加到套件中。 @SiobahnDevlin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
相关资源
最近更新 更多