SpriteKit Node.intersectsNode()方法在奇怪条件下不检测交叉点

时间:2014-11-30 02:39:41

标签: macos swift sprite-kit

我正在构建一个非常糟糕的平台游戏,我正在尝试检测节点的某些部分是否与另一个节点的部分位于同一位置。我会用方法:

func intersectingNode(node: SKNode) -> SKNode?{
   for floorObject in floorObjects{ // floorObjects is of type [SKNode]
        if floorObject.intersectsNode(node){
            return floorObject
        }
    }
    return nil
}

此时我应该指出,这里涉及的所有节点的锚点都在(0.5,0.5)。主要SKScene的锚点位于窗口的左下角。

此方法应该返回floorObjectsnode相交的floorObjects数组中的对象,如果它不与node数组中的任何对象相交,则该方法将返回没有节点。但我的问题是:如果floorObject的x位置小于node的x位置且floorObject的y位置大于y,则该方法不返回任何节点floorObject的位置。现在,由于所有节点上的锚点都在(0.5,0.5),因此该区域的某些区域位于if node.intersectsNode(floorObject){ 左上角的顶部。

如果我将第三行更改为:

floorObject

node的x位置将小于floorObject的x位置,node的y位置将大于{{1}}的y位置。< / p>

那么,如果一个节点的帧中的任何地方位于另一个节点的帧内某处,我怎么能确保上面的方法总是返回一个节点?

1 个答案:

答案 0 :(得分:1)

您可以直接比较frame,这应该可以满足您的需求:

if node.frame.intersects(floorObject.frame) {
    return floorObject
}

Link to Playground