My 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的电话。
由于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];