gpt4 book ai didi

swift - 找到距给定点一定距离内的所有 SKNode 的有效方法?

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:26 24 4
gpt4 key购买 nike

如果我想知道哪个或哪些节点覆盖场景的特定点,我可以执行 scene.nodeAtPoint(point)scene.nodesAtPoint(point)。有没有一种有效的方法可以用 做类似的事情?也就是能够找到在给定点一定距离内的所有节点。

我需要它能够更好地处理用户点击。场景相当稀少(上面没有太多用户事件的 Sprite ),因此无需要求用户非常精确地点击。我想在水龙头坐标周围使用某种公差,并检测刚好接近水龙头位置的节点。

到目前为止,我最好的想法是多次执行 nodeAtPoint():在水龙头的位置,然后以不同的偏移量(例如向上、向右、向右) , ..., 左上)。

最佳答案

距离

首先我们需要一个扩展来找到 2 个 CGPoint(s)

之间的距离
extension CGPoint {
func distance(point: CGPoint) -> CGFloat {
return CGFloat(hypotf(Float(point.x - self.x), Float(point.y - self.y)))
}
}

最近的 child

现在我们可以向 SKScene 添加扩展,以找到距离给定点最近且在 maxDistance 范围内的 child 。

extension SKScene {
func closestChild(point: CGPoint, maxDistance: CGFloat) -> SKNode? {
return self
.children
.filter { $0.position.distance(point) <= maxDistance }
.minElement { $0.0.position.distance(point) < $0.1.position.distance(point) }
}
}

时间

上述扩展的计算复杂度为 O(n),其中 n 是场景的直接子级的数量。

关于swift - 找到距给定点一定距离内的所有 SKNode 的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com