SpriteKit - 旋转后选择节点

时间:2015-08-30 14:35:54

标签: xcode sprite-kit

名为“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")

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

locationInNodenodeAtPoint中使用的节点和坐标需要保持一致。在这种情况下,locationInNode返回的点位于allObjects坐标,而nodeAtPoint调用(即self.nodeAtPoint)需要场景坐标中的点。要解决此问题,您可以替换

nodeAtPoint(location)

allObjects.nodeAtPoint(location)

或替换

let location = touch.locationInNode(allObjects)

用这个

let location = touch.locationInNode(self)