天天看點

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

在WWDC2014上,Sprite Kit又有了很多新的提升!

其中一個很有意思的東西就是Physics Field!也就是實體場!

這意味着我們在Sprite kit上編寫虛拟實體場的遊戲将變得非常簡單!

這裡我根據WWDC2014上What's new in Sprite kit的官方視訊上的DEMO,

用Swift語言自己做了一個Demo。

截圖如下:

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

先放上GitHub連結:

https://github.com/songrotek/PhysicsFieldsWorld.git

我另外錄制了效果視訊大家可以先一睹為快:

http://v.youku.com/v_show/id_XNzI2MzUzNzYw.html

下面介紹一下Physics Field!

1. 總體情況

Sprite Kit的實體場Physics Field一共有十個:

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

enum FieldType{

    case LinearGravityField  // 線性重力場

    case RadialGravityField  // 放射重力場

    case DragField  // 阻力場

    case VortexField  // 渦流場

    case VelocityField // 速度場

    case NoiseField  // 噪聲場

    case TurbulenceField  //紊亂場

    case SpringField // 彈簧場

    case ElectricField // 電子場

    case MagneticField // 磁場

}

2.場的通用參數

那麼所有類型的場都在SKFieldNode這個類中進行建立和設定!

無論是什麼類型的場,都有一些通用的參數設定。如下

// 場的影響區域,超出區域的物體不受場影響,預設是無限

var region: SKRegion! 

// 場強,預設是1

var strength: CFloat 

// 場的衰減指數,用來計算某個距離的作用力大小,從最小半徑開始計算。預設是0

var falloff: CFloat

// 場的最小影響半徑,預設是一個非常小的數

var minimumRadius: CFloat

// 如果enabled,則場起作用預設是true(在Swift下貌似不太好使,估計beta問題

var enabled: Bool

// 場的排他性,如果是true,則其他場無法作用在本場region範圍。如果有兩個場的影響範圍重合,則無法判斷哪個場作用

var exclusive: Bool    

// 場的作用物體類别,預設是all

@see SKPhysicsBody.fieldBitMask

@see SKEmitterNode.fieldBitMask

var categoryBitMask: UInt32

3.場的建立

舉例建立彈簧場:

let springField = SKFieldNode.springField()

springField.strength = 0.05

springField.falloff = -5

springField.position = fieldCenter

springField.name = "SpringField"

addChild(springField)

其他場一樣的方式,就是參數的設定根據具體需要不一樣

4.每種場!

4.1 線性場Linear Gravity Field

就是符合牛頓第二定律 F=ma

用它可以制造各種方向的重力,當然用physics world的gravity也可以設定,但這個場可以設定範圍。

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

4.2 放射重力場 Radial Gravity Field

要模拟一下月球繞着地球轉就得用這個,重力場在一個點上。

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

4.3 阻力場 Drag Field

在這個場就像一個物體運動遇到摩擦要減速,摩擦力取決于物體的速度

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

4.4 渦流場 Vortex Field

這個場可以用來制作龍卷風的效果,場的力繞着中心轉,如果strength為正就是逆時針,如果為負就是順時針

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

4.5 噪聲場 Noise Field 和 紊亂場 Turbulence Field

噪聲場就是每個位置受力情況随機,有個smoothness參數來調整噪聲力的平滑程度

紊亂場合噪聲場很接近,但對物體的影響較小

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

4.6 彈簧場 Spring Field

可以使物體像連接配接到了場中心的彈簧,會在場中心來回移動

iOS Sprite Kit最新特性Physics Field虛拟實體場Swift測試

4.7 速度場

需要添加一個SKTexture紋理,由紋理确定每個場位置點的力方向。

可以實作的效果就是比如弄了一條河的速度場,那麼一個物體放在河中就能沿着河流移動

4.8 電場Electric Field 和 磁場 Magnetic Field

就是洛倫茨力F=q(E * VB) ,其中qE是電場力,qVB是磁場力

為了實作電場和磁場的模拟,Sprite Kit的PhysicsBody中添加了Charge也就是帶電量。

但目前就我個人實驗,在Swift下并沒能實作電磁場的模拟,等待Apple的完善吧

5 小結

Physics Field是個很酷的特性,值得掌握使用,非常友善!

【注:本文為原創文章,如需轉載,請注明出處,來自songrotek的blog】