swift – 在给定点的特定距离内找到所有SKNode的有效方法?

swift – 在给定点的特定距离内找到所有SKNode的有效方法?,第1张

概述如果我想知道哪个或哪些节点覆盖了场景的某个点,我可以做scene.nodeAtPoint(point)或scene.nodesAtPoint(point).有没有一种有效的方法可以用圆圈做类似的事情?这是为了能够找到位置与给定点相距一定距离的所有节点. 我需要这个能够更好地处理用户点击.场景相当稀少(没有太多用户活跃的精灵),所以没有必要要求用户非常精确地点击.我想在水龙头的坐标周围使用某种公差, 如果我想知道哪个或哪些节点覆盖了场景的某个点,我可以做scene.nodeAtPoint(point)或scene.nodesAtPoint(point).有没有一种有效的方法可以用圆圈做类似的事情?这是为了能够找到位置与给定点相距一定距离的所有节点.

我需要这个能够更好地处理用户点击.场景相当稀少(没有太多用户活跃的精灵),所以没有必要要求用户非常精确地点击.我想在水龙头的坐标周围使用某种公差,并检测距离足够接近位置的节点.

到目前为止,我最好的想法是多次执行nodeAtPoint():在tap的位置,然后在它的各种偏移处(例如up,up-right,rigth,…,left-left).

为了确定场景中的一个或多个节点是否在触摸事件的固定距离内,1)计算触摸与每个节点之间的距离,以及2)比较该距离是否小于或等于常数.这是一个如何做到这一点的例子:
overrIDe func touchesBegan(touches: Set<UItouch>,withEvent event: UIEvent?) {    if let touch = touches.first {        let location = touch.locationInNode(self)        let nodes = nodesNearPoint(self,point:location,maxdistance: 30)        if nodes.count > 0 {            print("node is near touch point")        }    }}// Returns an array of all SKNode objects in the subtree that near the specifIEd point.// If no nodes are near the point,an empty array is returned.func nodesNearPoint(container:SKNode,point:CGPoint,maxdistance:CGfloat) -> [SKNode] {    var array = [SKNode]()    for node in container.children {        // Only test sprite nodes (optional)        if node is SKSpriteNode {            let dx = point.x - node.position.x            let dy = point.y - node.position.y            let distance = sqrt(dx*dx + dy*dy)            if (distance <= maxdistance) {                array.append(node)            }        }    }    return array}
总结

以上是内存溢出为你收集整理的swift – 在给定点的特定距离内找到所有SKNode的有效方法?全部内容,希望文章能够帮你解决swift – 在给定点的特定距离内找到所有SKNode的有效方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1028238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存