【发布时间】: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