SpriteKit:检测UILongPressGestureRecognizer是否点击了子节点

时间:2017-09-28 15:59:29

标签: swift swift3 sprite-kit uigesturerecognizer swift4

我想检测我的节点是否被点击。我正在使用UIGestureRecognizer:

    let longPress = UILongPressGestureRecognizer()
    longPress.minimumPressDuration = CFTimeInterval(0.0)
    longPress.addTarget(self, action: #selector(self.longPressGesture(longpressGest:)))
    self.view?.addGestureRecognizer(longPress)

所谓的函数:

@objc func longPressGesture(longpressGest: UIGestureRecognizer) {

    let touchPos = longpressGest.location(in: self.view)
    if atPoint(touchPos).name == "jump" {
        print("jump")
    } 

}

点击时我想要检测到的按钮:

let jump = SKSpriteNode(imageNamed: "Any")
jump = CGSize(width: self.size.width*0.06, height: self.size.height*0.08)
jump = CGPoint(x: self.size.width*0.05 - self.size.width/2, y: self.size.height*0.1 - self.size.height/2)
jump.zPosition = 2
jump.name = "jump"
cameraNode.addChild(jump)

Importend :jump是来自cameraNode的子节点

我的相机节点:

self.camera = cameraNode
self.addChild(cameraNode)

let cameraNode = SKCameraNode()
let range = SKRange(constantValue: 0)
let cameraConstraint = SKConstraint.distance(range, to: player)
cameraNode.constraints = [cameraConstraint]

使用此代码不会打印“跳转”。我想我必须将touchPos转换为相同的坐标系,如cameraNodes或跳跃按钮系统。 我的问题:如何将视图坐标转换为我的cameraNodes坐标系?

P.S。我已经尝试过无效的整个转换功能。也许我只是做错了。

1 个答案:

答案 0 :(得分:0)

SKNodes有一个名为convertPoint

的方法
@objc func longPressGesture(longpressGest: UIGestureRecognizer) {

    let touchPosinView = longpressGest.location(in: self.view)
    let touchPos = self.convertPoint(fromView:touchPosinView )
    if atPoint(touchPos).name == "jump" {
        print("jump")
    } 

}