触摸spritenode的透明区域

时间:2017-08-04 21:05:56

标签: sprite-kit

我有一些无定形的按钮。 (按钮的矩形相交)首先,我评估了GameScene中的BeganTouch。然后我接触了几次。

由于我的按钮仍然是子节点,因此它们吞下了触摸。好的,我已经在这里帮助了SpriteNodes的子类并处理了子类内部的触摸。现在我遇到的问题是第一个按钮没有将触摸传递给底层精灵。

但是现在我想忽略按钮的透明区域,我该怎么做?

我已经读过一个人可以使用物理学家,我已经尝试过,gravitiy = 0但是因为我通过动作移动和缩放按钮会产生剧烈效果。

为什么我可以检查触摸位置的alpha并将触摸传递给下一个精灵。

顺便说一下:如何获得对视图的引用?得到全球的loc。 let loc = touch.location(in:view)

使用全局触摸位置我可以检查此点下的所有精灵为alpha!

2 个答案:

答案 0 :(得分:2)

您可以尝试从您的子类中将触摸传递给它的父级(可能是场景)。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    if let touch = touches.first as UITouch! {

        //handle whatever code you want your subclass to do
        ... 

        //pass the touch event to the parent
        super.touchesBegan(touches, with: event)
    }
}

然后在你的场景中,循环显示你的按钮(在这个例子中我有按钮数组中的按钮)

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    if let touch = touches.first as UITouch! {

        let touchLocation = touch.location(in: self)

        for button in buttons {

            if button.contains(touchLocation) {
                //handle all other buttons
                ...
            }
        }
    }
}

尽管在两个不同的位置进行触摸似乎有点多余。 @ Knight0fDragon是正确的,让按钮有透明区域似乎很奇怪。

答案 1 :(得分:1)

好的,这很简单,所有按钮都来自同一个子类。这个子类委托给GameScene中的一个方法。我可以在这里查看

allNodes = nodes(at:globalLocation)

现在我可以检查节点的名称,计算每个节点内像素的点并获得alpha值。

thanxs all