首页 > 解决方案 > GKRTree 根本不想工作,还有其他类似的方法吗?

问题描述

我正在制作一个游戏,我需要在一定半径内定义爆炸半径中的对象。首先,我正在通过所有对象之间的距离,但我看到 GameplayKit 中有 GKRTree 类。但是经过多次尝试,它根本不想工作。在任何情况下它都只返回空数组。我想知道,是 GKRTree 类坏了还是什么。如果是,是否有任何其他方法可以在 swift 或 github 中执行与 GKRTree 相同的操作。因为我不想计算距离,因为它可以使用很多 cpu。谢谢

编辑:我尝试了这个答案https://stackoverflow.com/a/38655862/11687591中描述的内容,但它不起作用。并且没有关于这个问题的其他解决方案。有一些链接,有人在谈论损坏的 gkrtree 并且没有答案。https://www.reddit.com/r/swift/comments/63frk6/does_anyone_have_a_working_example_of_gkrtree/ https://twitter.com/StayOnTheMove/status/1067067053419520000?s=20 就这样。我尝试过的一件事是我创建了 2 个圆圈。其中一个是不动的,并且一直处于一个位置。另一个正在移动到我的触摸位置。第二个比另一个小。较大的有点透明,所以我可以看到其他圆圈。我还使用 print() 来查看代码中发生的所有事情。毕竟,即使一个圆圈在另一个圆圈内的情况很明显,gkrtree.entities 方法也不起作用,它返回空数组。

标签: swiftsprite-kitgameplay-kit

解决方案


对于它的价值,GamePlayKit.GKRTree 最近对我来说在 Xcode 11.5+ 中失败了。下一行,

import GameKit

class blah {
  private var searchTree: GKRTree<RouteSegment>?
  public init() {
    searchTree = GKRTree.init(maxNumberOfChildren: 3)
  }
}

使用 let 表达式也会得到一个 nil 值。

编辑:

它返回 nil 的原因是因为我在项目的链接阶段没有 GameplayKit。呃。默认情况下,所有 iOS 框架都在搜索路径上,这并不意味着它们将在运行时可用。我不确定苹果为什么选择这种机制。当我将汇编代码步骤跟踪到 init() 函数时,我发现它只是返回 nil;API 中必须有一些存根。

我的解决方案:确保 GameplayKit 处于项目设置中的链接二进制文件阶段。


推荐阅读