过去几天我使用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教程
的帮助下找到了这个解决方案答案 0 :(得分:1)
查看代码并在Xcode中进行尝试,看起来它可能没问题......它在我的运行正常,但我的粒子发射器有很大的扩散,几乎看不到......
尝试将x位置更改为屏幕中间:512。
它是将发射器定位到屏幕的一部分,而不是可见的导致问题。
您还可以调整点差以使其从该位置可见,但您说您是新的,最可能的原因是x位置。
编辑:
好吧,你似乎忘记了创建粒子。 只需点击文件<新<文件然后单击SpriteKit Particle Emmitter,选择您想要的模板,最后确保您给粒子的名称与您在代码中命名的名称相同,反之亦然。