在Swift中创建线性重力场

时间:2014-08-28 22:04:53

标签: ios xcode swift sprite-kit

似乎在Swift中已经弃用了带矢量方法的线性重力场。在这种新语言中有一堆新的SKFieldNode,但我似乎找不到类似线性引力的那种。 Swift中甚至没有“方向”属性。也许可以使用这个泛型方法customFieldWithEvaluationBlock完成,但我不知道如何。我是SpriteKit的新手。

那么,我们怎样才能在Swift中产生相同的物理效果?

2 个答案:

答案 0 :(得分:4)

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

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

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

现在,您可以从ObjC访问这些API - 在Swift项目中,您可以使自己成为一个小的ObjC包装函数,并在桥接头中将其暴露给Swift。

答案 1 :(得分:0)

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