名为“leaf”的SKSpriteNode作为子项添加到另一个名为“allObjects”的SKSpriteNode。
allObjects设置为与SKView相同的宽度和高度。
我将叶子拖到allObjects上的某个位置并单击其尖端的一个独特部分,然后使用println在控制台中获取以下内容。
touchBegan,touch.locationInNode(allObjects):( 621.5,156.75)
touchesEnded,touch.locationInNode:(621.5,156.75)
touchesEnded,叶子位置:(695.375,83.25)
touchesEnded,nodeAtPoint(location).name:可选(" leaf")
到目前为止,这么好。我可以在这一点上拖动叶子,没有任何问题。需要注意的重要部分是nodeAtPoint正如预期的那样是'leaf'。
但是,如果我然后旋转allObjects,就像这样:
var rotate = SKAction()
rotate = SKAction.rotateByAngle(0.4, duration: 0)
allObjects.runAction(rotate)
...然后单击叶子上的相同位置(在IOS模拟器中可视化),我在控制台中获得以下内容。我很困惑为什么我旋转allObjects并点击相同的位置(并得到相同的坐标)我不再选择叶子但是大幅度地忽略它(nodeAtPoint显示我正在击中背景)。
touchBegan,touch.locationInNode(allObjects):( 620.813842773438, 156.470306396484)
touchesEnded,touch.locationInNode:(620.813842773438,156.470306396484)
touchesEnded,叶子位置:(695.375,83.25)
touchesEnded,nodeAtPoint(location).name:可选(" allObjects")
有人可以帮忙吗?
答案 0 :(得分:1)
locationInNode
和nodeAtPoint
中使用的节点和坐标需要保持一致。在这种情况下,locationInNode
返回的点位于allObjects
坐标,而nodeAtPoint
调用(即self.nodeAtPoint
)需要场景坐标中的点。要解决此问题,您可以替换
nodeAtPoint(location)
与
allObjects.nodeAtPoint(location)
或替换
let location = touch.locationInNode(allObjects)
用这个
let location = touch.locationInNode(self)