我正在构建一个非常糟糕的平台游戏,我正在尝试检测节点的某些部分是否与另一个节点的部分位于同一位置。我会用方法:
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的锚点位于窗口的左下角。
此方法应该返回floorObjects
与node
相交的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>
那么,如果一个节点的帧中的任何地方位于另一个节点的帧内某处,我怎么能确保上面的方法总是返回一个节点?
答案 0 :(得分:1)
您可以直接比较frame
,这应该可以满足您的需求:
if node.frame.intersects(floorObject.frame) {
return floorObject
}