【问题标题】:SpriteKit Node.intersectsNode() method not detecting intersections under strange conditionsSpriteKit Node.intersectsNode() 方法在奇怪的条件下未检测到交叉点
【发布时间】:2014-11-30 02:39:40
【问题描述】:

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

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 的x 位置小于floorObject 的x 位置并且node 的y 位置大于floorObject 的y 位置,则该方法不返回任何节点。现在,由于所有节点上的锚点都位于 (0.5, 0.5),因此该区域的一部分位于 floorObject 的左上四分之一的顶部。

如果我把第三行改成这样:

if node.intersectsNode(floorObject){

floorObject 的 x 位置小于 node 的 x 位置,floorObject 的 y 位置大于node 的 y 位置。

那么,如果一个节点的框架中的任何位置在另一个节点的框架内的某个位置,我如何确保上述方法始终返回一个节点?

【问题讨论】:

  • 我建议您将println (floorObject.frame) 添加到循环中以确定floorObjects 的位置/大小。
  • 如果节点是SKNodes,那么它们将没有帧。
  • @Okapi 和 SKNode 确实有一个带有 size == (0,0) 的框架属性。我怀疑这是导致意外结果的问题。

标签: macos swift sprite-kit


【解决方案1】:

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

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

Link to Playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多