繁体   English   中英

SpriteKit - 获取最近的节点

[英]SpriteKit - getting closest nodes

有没有办法让最近的节点到节点?

我只是想编写一个迭代所有节点并计算距离等的方法......但是想知道是否有更好的方法?

我有30个节点,需要2个最近的节点到30个节点中的每一个(如果这是有意义的)。

从iOS 10开始,您可以使用GampelayKit的空间分区功能。 在2D中, GKQuadtreeGKRTree取决于您的需要。

来自文档:

四叉树和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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM