我的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的任何要求。
答案 0 :(得分:1)
由于SKScene
是SKNode
的子类,您可以在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];