iOS Spritekit intersectsnode не работает для SKShapeNode

Я использую шаблон iOS SpriteKit Game Swift на iOS8.3. Я пытаюсь использовать функцию func intersectsNode(_ node: SKNode) -> Bool обнаружить перекрытие двух кругов, созданных как SKShapeNodes. Оказывается, функция не обнаруживает пересечение, если его SKShapeNodes. Но при дальнейшем устранении неполадок оказывается, что функция работает, если я использую спрайт космического корабля по умолчанию для шаблона. Вот код, который работает:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)

        let sprite = SKSpriteNode(imageNamed:"Spaceship")

         sprite.xScale = 0.3
         sprite.yScale = 0.3
         sprite.position = location

        self.circles.append(sprite)

        self.addChild(sprite)

        if circles.count == 1 {
            println("One circle")
        } else {
            for var index = 0; index < circles.count-1; ++index {
                if sprite.intersectsNode(circles[index]) {
                    println(circles[index].frame)
                    println("Circle intersects another")
                }
            }
        }
    }

}

Когда в приведенном выше коде два спрайта перекрываются, функция возвращает YES и печатает строку пересечения. Вот код, который НЕ работает:

   override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)

        let sprite = SKShapeNode(circleOfRadius: 50)

         sprite.position = location

        self.circles.append(sprite)

        self.addChild(sprite)

        if circles.count == 1 {
            println("One circle")
        } else {
            for var index = 0; index < circles.count-1; ++index {
                if sprite.intersectsNode(circles[index]) {
                    println(circles[index].frame)
                    println("Circle intersects another")
                }
            }
        }
    }

}

Как вы можете видеть, блоки кода полностью идентичны, за исключением того, что в одном случае это SKSpriteNode, а в другом - SKShapeNode. Я также напечатал кадры кругов SKShapeNode и вижу, что у них есть действительные кадры. Так что я озадачен этим, так как я хотел бы сейчас использовать SKShapeNodes в своем коде, но я не могу использовать функцию intersectNode, так как она не работает.

1 ответ

Документация для intersectsNode говорит это:

Считается, что два узла пересекаются, если их кадры пересекаются. Дочерние элементы обоих узлов игнорируются в этом тесте.

Это означает, что вы не получите желаемый результат при использовании кругов.

Однако проверить, перекрываются ли два круга, так же просто, как проверить, меньше ли расстояние между их центрами, чем сумма их радиусов.

Другие вопросы по тегам