sprite-kit - SKEmitterNode 在用作另一个参考节点中的参考节点时不起作用
问题描述
我在使用带有参考节点的粒子发射器时遇到问题。
当它在场景中直接引用时(例如,在 GameScene.sks 文件中),它可以工作,但是当它在另一个 .sks 文件中引用时它不起作用,然后在 GameScene.sks 中引用该文件/节点,尽管其他引用的节点正确显示。
这是层次结构:
GameScene.sks
- Reference Node to RocketFire.sks (emitter) <-- works
- Reference Node to Rocket.sks
Rocket.sks
- Reference Node to RocketFire.sks (emitter) <-- doesn't work in GameScene
- Reference Node to Engine.sks (non-emitter nodes) <-- works in GameScene
RocketFire.sks (SpriteKit particle file)
Engine.sks (SpriteKit scene file with non-emitter nodes)
使用参考节点或粒子发射器的方法是否错误?
(如果需要更多信息,请告诉我)
编辑:
我实际上在某些时候让它工作了。有时,当我在所有文件中删除并重新添加引用的节点,或者如果我更改节点层次结构时,它会突然开始工作。但是,我仍然无法确定它何时工作以及何时不工作的一致原因,因为因为更改它并将其恢复到工作时,并不能修复它。(老实说,感觉像一个错误)
解决方案
问题是,从 iOS 10 开始,所有精灵节点都默认暂停。这包括您的场景。仅仅让你的场景不暂停(isPaused = false)是不够的,你还必须让孩子们不暂停。
对于您的示例,我将烟雾发射器添加到我的 plane.sks 文件中,该文件作为 SKReferenceNode 拖到我的 GameScene.sks 文件中
在我的 Plane.swift 文件中,请注意我已将 isPaused = false 放在其中一个发射器上,但它仍然不起作用
var leftSmoke: SKEmitterNode!
var rightSmoke: SKEmitterNode!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
if let leftSmoke = self.childNode(withName: "//leftSmoke") as? SKEmitterNode {
self.leftSmoke = leftSmoke
leftSmoke.isPaused = false
}
if let rightSmoke = self.childNode(withName: "//rightSmoke") as? SKEmitterNode {
self.rightSmoke = rightSmoke
}
}
运行场景的飞机(无发射器)
将平面对象设置为不暂停(在 Plane.swift 中)
func setup() {
self.isPaused = false
if let leftSmoke = self.childNode(withName: "//leftSmoke") as? SKEmitterNode {
self.leftSmoke = leftSmoke
leftSmoke.isPaused = false
}
if let rightSmoke = self.childNode(withName: "//rightSmoke") as? SKEmitterNode {
self.rightSmoke = rightSmoke
}
}
瞧
供参考
它可能会间歇性地为您工作,因为您可能设置了断点。每当您设置了断点并且代码将其停止时,它都会自动取消暂停节点
推荐阅读
- tensorflow - 张量流中的批量标准化问题
- instagram - 将 M3U8 流式传输到 Instagram Live
- c# - 制作控制台菜单的“正确”方法是什么?
- r - 如何使用 SQL 定义 dbplyr 表
- stored-procedures - 将存储过程中的原始输入格式化为 Azure LogicApps 中的可读格式
- scala - Scalaz StateT,无权获取/修改/放置?
- jmeter - Transaction Controller is Not Showing Overall response time of all Samples
- html - CSS - component transparency
- java - AES-128 encryption in Java
- c# - How create a new instance of a class that is present inside another class?