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

Posted

技术标签:

【中文标题】SpriteKit:检测 UILongPressGestureRecognizer 是不是点击了子节点【英文标题】:SpriteKit: detect if UILongPressGestureRecognizer tapped child nodeSpriteKit:检测 UILongPressGestureRecognizer 是否点击了子节点 【发布时间】:2017-09-28 15:59:29 【问题描述】:

我想检测我的节点是否被点击。我正在使用 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)

导入: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 坐标系?

附:我已经尝试过所有不起作用的转换功能。也许我做错了。

【问题讨论】:

【参考方案1】:

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")
     


【讨论】:

如果我这样做。出现此错误消息:无法转换 'SKView?' 类型的值到预期的参数类型'CGPoint' 我想我已经试过了,但是像这样convertPoint(fromView:longpressGest.location(in: self.view))你写的和你写的有区别吗?

以上是关于SpriteKit:检测 UILongPressGestureRecognizer 是不是点击了子节点的主要内容,如果未能解决你的问题,请参考以下文章

未检测到 SpriteKit 碰撞

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

未检测到 spritekit 物理碰撞

touchesEnded:withEvent: 未检测到 SpriteKit 中的顶部节点

SpriteKit - 如何检测使用触摸影响哪个节点?

未检测到 SpriteKit 碰撞