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")
    }