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:检测 UILongPressGestureRecognizer 是不是点击了子节点