如何找到NSTouch的-locationInNode等价物?

时间:2014-09-05 13:08:13

标签: macos cocoa-touch sprite-kit nsevent nstouch

我的SpriteKit Mac应用程序通过-touchesBeganWithEvent:(NSEvent)事件响应NSTouch事件。但是,调用-locationInNode只能为我提供该NSTouch鼠标坐标的位置。但我要做的是将触控板上的触摸坐标映射到屏幕上,如下所示:

NSTouch *touch = [touches anyObject];
CGPoint sceneCoord;
sceneCoord.x = touch.normalizedPosition.x * self.size.width;
sceneCoord.y = touch.normalizedPosition.y * self.size.height;

这会将触控板坐标转换为窗口/场景坐标。但我需要知道触摸的位置在场景中的一个SKNode中。对于鼠标点击,我只使用[event locationInNode:theNode],但我无法使用该调用,因为我手动计算上面的事件坐标。

我很惊讶SpriteKit没有处理NSTouches的任何要求。

1 个答案:

答案 0 :(得分:1)

由于SKSceneSKNode的子类,您可以在SKScene上致电[SKNode convertPoint:toNode:],将坐标转换为您的节点。

NSTouch *touch = [touches anyObject];
CGPoint sceneCoord;
sceneCoord.x = touch.normalizedPosition.x * self.size.width;
sceneCoord.y = touch.normalizedPosition.y * self.size.height;

SKNode *nodeOfInterest = ...
CGPoint locationInNode = [scene convertPoint:sceneCoord toNode:nodeOfInterest];