SKEmitterNode 有问题吗?
Issue with SKEmitterNode?
所以我的一个 SKEmitterNode 有问题。我有一个 SKSpriteNode,触摸它会打开一个新场景。这是开始的代码:
for touch: AnyObject in touches {
let location = (touch as! UITouch).location(in: self)
if let nodeName = self.atPoint(location).name {
if nodeName == "playBox" || nodeName == "playButton" {
buttonSound()
pulse(playBox, scene: "GameScene")
}else if nodeName == "shopBox" || nodeName == "shopButton"{
buttonSound()
pulse(shopBox, scene: "shop")
}}}
至此,一切正常。当我将我的 SKEmitterNode 添加到场景时,我的问题就出现了。发射器是一个星空效果,所以小点从场景的顶部到底部。一旦我添加了这个发射器,我的按钮就停止工作了!
我尝试了所有降低生成速度、降低 zPosition 的方法,但似乎没有任何效果。
如果您有任何建议,请告诉我。谢谢!
-马特
很明显,命中测试检测的是粒子系统,而不是按钮。您可以使用 nodes(at:) 来获取该点的所有节点列表(而不仅仅是第一个节点)。然后您需要迭代或过滤该数组并找出这些节点中哪些是按钮。
for touch: AnyObject in touches
{
let location = (touch as! UITouch).location(in: self)
let nodes = self.nodes(at:location)
let filtered1 = nodes.filter{ [=10=].name == "playBox" || [=10=].name == "playButton" }
let filtered2 = nodes.filter{ [=10=].name == "shopBox" || [=10=].name == "shopButton" }
if let node = filtered1.first {
buttonSound()
pulse(playBox, scene: "GameScene")
}
if let node = filtered2.first {
buttonSound()
pulse(shopBox, scene: "shop")
}
所以我的一个 SKEmitterNode 有问题。我有一个 SKSpriteNode,触摸它会打开一个新场景。这是开始的代码:
for touch: AnyObject in touches {
let location = (touch as! UITouch).location(in: self)
if let nodeName = self.atPoint(location).name {
if nodeName == "playBox" || nodeName == "playButton" {
buttonSound()
pulse(playBox, scene: "GameScene")
}else if nodeName == "shopBox" || nodeName == "shopButton"{
buttonSound()
pulse(shopBox, scene: "shop")
}}}
至此,一切正常。当我将我的 SKEmitterNode 添加到场景时,我的问题就出现了。发射器是一个星空效果,所以小点从场景的顶部到底部。一旦我添加了这个发射器,我的按钮就停止工作了!
我尝试了所有降低生成速度、降低 zPosition 的方法,但似乎没有任何效果。
如果您有任何建议,请告诉我。谢谢!
-马特
很明显,命中测试检测的是粒子系统,而不是按钮。您可以使用 nodes(at:) 来获取该点的所有节点列表(而不仅仅是第一个节点)。然后您需要迭代或过滤该数组并找出这些节点中哪些是按钮。
for touch: AnyObject in touches
{
let location = (touch as! UITouch).location(in: self)
let nodes = self.nodes(at:location)
let filtered1 = nodes.filter{ [=10=].name == "playBox" || [=10=].name == "playButton" }
let filtered2 = nodes.filter{ [=10=].name == "shopBox" || [=10=].name == "shopButton" }
if let node = filtered1.first {
buttonSound()
pulse(playBox, scene: "GameScene")
}
if let node = filtered2.first {
buttonSound()
pulse(shopBox, scene: "shop")
}