SpriteKit - 获取最近的节点

Fog*_*ter 6 ios sprite-kit

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

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

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

Ada*_*Eri 6

从 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)
Run Code Online (Sandbox Code Playgroud)

然后就可以按地区搜索了。

    let enemiesInProximity = enemiesRTree.elements(
       inBoundingRectMin: vector2(0, 0),
       rectMax: vector2(100, 100))
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建搜索区域,例如相对于玩家位置的搜索区域。