SKScene + TouchBegan 错误

SKScene + TouchBegan Bug

我的 SKScene 有 1 个空节点 (buttonsGroup)。在我的 GameView class 中,我创建了一个节点 (ball1),它是空节点的父节点。

    buttonsGroup = childNodeWithName("ball1")


    var ball1 = SKSpriteNode(imageNamed: "ball")
    ball1.name == "ball1"
    buttonsGroup.addChild(ball1)

当我尝试使用 TouchesBegan 移动节点时出现问题:

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {

    for touch in (touches as! Set<UITouch>) {

        let location = touch.locationInNode(self)
        let touchNode = nodeAtPoint(location)

        if touchNode.name != "ground" {
            touchNode.position = location
        }
    }
} 

我已经知道,如果您使用 SKScene 和 touchNode 位置,它们将 return 不同的值(或者至少看起来如此)。在这种情况下,节点只是跳到任何地方。我的 SKScene 的大小是 480x320。

有人知道解决办法吗?如果我手动操作(没有 SKScene),它可以毫无问题地工作。在尝试使用 moveBy 操作或任何其他需要我在视图中的位置的操作时,我已经多次遇到这个问题。

如果您尝试移动球,则需要使用 convertPoint:toNode or convertPoint:fromNode 将触摸位置从场景坐标转换为球的父级坐标。

例如,

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)
        let node = nodeAtPoint(location)
        if (node.name != "ground") {
            let locationInNode = convertPoint(location, toNode:node.parent!)
            node.position = locationInNode
        }
    }
}