我有一个iOS应用程序,是用SpriteKit编写的。
它使用4个SKShapeNode元素来确定用户点击屏幕的哪个部分。
所有这些元素都是三角形,它们像一个大X一样分割屏幕。
它们是使用绘制三角形的CGPath创建的。
要确定用户是否在节点中点击了我使用的场景方法-NodeAtPoint
在iOS 8.4中,一切都按预期工作:当我点击三角形内部时,NodeAtPoint返回刚才点击的SKShapeNode
在iOS 9.0中NodeAtPoint返回SKShapeNode,即使我点击了它的边界之外,但在我的SKShapeNode适合的矩形的边界之内。
所以我的问题是:NodeAtPoint方法应该如何为SKShapeNode工作?
如果点在其形状内,则返回SKShapeNode
如果点在其帧内,则返回SKShapeNode

最佳答案

请参考https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/#//apple_ref/occ/instm/SKNode/nodeAtPoint
SKNodenodeAtPoint函数总是返回SKNode。然后可以将SKShapeNode转换为SKNode。为了回答您的另一个问题,使用calculateAccumulatedFrame函数计算帧。你可以在这里看到https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/#//apple_ref/occ/instm/SKNode/calculateAccumulatedFrame
所以你可以这样做:

if let node = scene.nodeAtPoint(CGPointMake(0,0)) as? SKShapeNode {
//do whatever
}

关于ios - NodeAtPoint方法何时应返回SKShapeNode?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32715919/

10-13 04:28