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
}
}
}
我的 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
}
}
}