2014-08-28 69 views
2

似乎在矢量方法中的線性引力場在Swift中已被棄用。在這種新語言中有一堆新的SKFieldNode,但我似乎無法找到類似線性引力的東西。 「方向」屬性在Swift中甚至沒有。也許它可以使用這個泛型方法customFieldWithEvaluationBlock來完成,但我不知道如何。我是SpriteKit的新手。在Swift中創建線性引力場

那麼,我們如何才能在Swift中實現相同的物理效果?

+0

它看起來不像它已被棄用,只是...從Swift SpriteKit API中缺少。您可能需要[提交錯誤](http://bugreport.apple.com)。 – 2014-08-28 22:43:46

回答

4

在斯威夫特2(Xcode中7的一部分),SIMD向量可供斯威夫特,因此API使用它們(如linearGravityFieldWithVector,新的GameplayKitModel I/O框架等)現在也被導入到Swift中......沒有必要的解決方法了。

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

此前... 的SKFieldNode類方法linearGravityFieldWithVector做到這一點,但它在斯威夫特的不可用。在ObjC中,向量參數使用SIMD庫中的vector_float3類型,該類型使用特殊的C編譯器魔術來製作使用SSE(在OS X/x86上)或NEON(在iOS/ARM上)硬件加速並很好地發送給GPU的向量。這種voodoo目前不存在於Swift中,所以任何依賴它的ObjC API都不會被導入到Swift中。

現在,您可以從ObjC訪問這些API - 在Swift項目中,您可以使自己的ObjC包裝函數和暴露在您的橋接頭中的Swift。

+0

好的,所以我對它被棄用的錯誤假設。使用目標C包裝器很好的呼籲,我會認爲這是我的工作。謝謝! – Donn 2014-08-28 23:57:40

+0

它不識別float3或linearGravityFieldWithVector。我不明白如何讓它這樣做的部分。目標c包裝? – 2015-10-07 18:33:35

+0

那麼你可能沒有使用Xcode 7。 – rickster 2015-10-07 18:34:37

0

如果你想直線重力適用於你可以嘗試設置physicsWorld.gravity的所有節點,這是一個CGVector

+0

並非所有節點。我想重力只適用於特定區域。 – Donn 2014-08-28 22:32:50