我正在使用SpriteKit为Apple Watch编写一个应用程序,因此我无法访问touchesBegan等功能,我必须使用WKTapGestureRecognizer来检测点击,这没什么大不了的,但我在检测节点上的点击时遇到了问题。
@IBAction func handleTap(tapGestureRecognizer: WKTapGestureRecognizer){
scene?.didTap(tapGesture: tapGestureRecognizer)
}
在我的场景文件中
func didTap(tapGesture:WKTapGestureRecognizer) {
let position = tapGesture.locationInObject()
let hitNodes = self.nodes(at: position)
if hitNodes.contains(labelNode) {
labelNode.text = "tapped!"
}
问题是Tap手势识别器给了我触摸点的绝对坐标(例如11.0、5,0),而我的节点相对于屏幕中心定位(因此其位置是-0.99,-11.29,即使是在屏幕的中心)因此,敲击击中节点而不是在实际敲击它时,但是当我点击屏幕左上角时,我到处搜索,看起来这是解决问题的方法,但我没有找到有同样问题的人。节点是通过编辑器添加的。我做错了什么?
1条答案
按热度按时间fquxozlt1#
所以你的想法是对的,但是你错了,因为hitNodes是一个SKNode数组,那些是新创建的,所以当你使用hitNodes时,包含了labelNode的地址,和新创建的,被比较的SKNode的地址是完全不同的,因此它永远不会被点击。
这是我要做的。这会在我的场景文件中。你的InterfaceController类是正确的。
或者另一种方法是这样的,我喜欢这种方法,因为你只有一个函数,在WKInterfaceController中,你不需要场景文件中的函数。
无论哪种方式,两者都应该工作。让我知道,如果你有任何更多的问题或澄清。