[英]SpriteKit - getting closest nodes
有没有办法让最近的节点到节点?
我只是想编写一个迭代所有节点并计算距离等的方法......但是想知道是否有更好的方法?
我有30个节点,需要2个最近的节点到30个节点中的每一个(如果这是有意义的)。
从iOS 10开始,您可以使用GampelayKit的空间分区功能。 在2D中, GKQuadtree或GKRTree取决于您的需要。
来自文档:
四叉树和R树对于不同的任务具有不同的性能权衡:当物体在空间中更均匀地分布或者它们的位置经常变化时,四叉树可以更快,并且当搜索给定区域中的所有物体时R树可以更快。
将你的敌人添加到树上:
let minX = Float(enemy.frame.minX)
let minY = Float(enemy.frame.minY)
let maxX = Float(enemy.frame.maxX)
let maxY = Float(enemy.frame.maxY)
var enemiesRTree = GKRTree(maxNumberOfChildren: 3)
enemiesRTree.addElement(enemy,
boundingRectMin: vector2(minX, minY),
boundingRectMax: vector2(maxX, maxY),
splitStrategy: GKRTreeSplitStrategy.linear)
然后你可以按地区搜索。
let enemiesInProximity = enemiesRTree.elements(
inBoundingRectMin: vector2(0, 0),
rectMax: vector2(100, 100))
然后,您可以创建搜索区域,例如相对于玩家的位置。
我相信你的方法最适合这种情况。 如果以阵列样式存储所有节点,则可能有相对有效的方法来执行上面提到的操作。
在任何情况下,您仍然可能有三个节点最接近的任务。 如果这不是问题,则使用一种方法,该方法采用节点位置,然后使用for循环投影半径增加的“不可见圆”,直到圆最终包含2个节点。 然后只返回那些节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.