【问题标题】:Creating a Linear Gravity Field in Swift在 Swift 中创建线性重力场
【发布时间】:2014-08-28 22:04:52
【问题描述】:

在 Swift 中,使用矢量方法的线性重力场似乎已被弃用。这种新语言中有一堆新的 SKFieldNode,但我似乎找不到一个类似于线性引力的。 Swift 中甚至没有属性“direction”。也许可以使用这种通用方法 customFieldWithEvaluationBlock 来完成,但我不确定如何。我是 SpriteKit 的新手。

那么,我们如何在 Swift 中制作相同的物理效果?

【问题讨论】:

  • 它看起来并没有被弃用,只是......从 Swift SpriteKit API 中丢失了。您可能想file a bug 了解它。

标签: ios xcode swift sprite-kit


【解决方案1】:

在 Swift 2(Xcode 7 的一部分)中,SIMD 向量可用于 Swift,因此使用它们的 API(例如 linearGravityFieldWithVector、新的 GameplayKitModel I/O 框架等)现在被导入到Swift 也一样...不再需要变通方法。

let field = SKFieldNode.linearGravityFieldWithVector(float3(1,0,0))

以前... SKFieldNode 类方法 linearGravityFieldWithVector 可以做到这一点,但它在 Swift 中不可用。在 ObjC 中,向量参数使用 SIMD 库中的 vector_float3 类型,它使用特殊的 C 编译器魔法来制作使用 SSE(在 OS X / x86 上)或 NEON(在 iOS / ARM 上)硬件加速的向量,并很好地打包发送到GPU。这种巫术目前在 Swift 中不存在,因此任何依赖它的 ObjC API 都不会导入到 Swift 中。

现在,您可以从 ObjC 访问这些 API —— 在 Swift 项目中,您可以为自己创建一个小的 ObjC 包装函数,并在您的桥接头中将其公开给 Swift。

【讨论】:

  • 好的,所以我对它被弃用有一个错误的假设。很好地呼吁使用目标 c 包装器,我会认为这是我的工作。谢谢!
  • 它无法识别 float3 或 linearGravityFieldWithVector。而且我不明白如何让它这样做的部分。目标 c 包装器?
【解决方案2】:

如果你想对所有节点应用线性重力,你可以尝试设置physicsWorld.gravity,它是CGVector

【讨论】:

  • 并非所有节点。我希望重力仅适用于特定区域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多