在WWDC2014上,Sprite Kit又有了很多新的提升!
其中一個很有意思的東西就是Physics Field!也就是實體場!
這意味着我們在Sprite kit上編寫虛拟實體場的遊戲将變得非常簡單!
這裡我根據WWDC2014上What's new in Sprite kit的官方視訊上的DEMO,
用Swift語言自己做了一個Demo。
截圖如下:
先放上GitHub連結:
https://github.com/songrotek/PhysicsFieldsWorld.git
我另外錄制了效果視訊大家可以先一睹為快:
http://v.youku.com/v_show/id_XNzI2MzUzNzYw.html
下面介紹一下Physics Field!
1. 總體情況
Sprite Kit的實體場Physics Field一共有十個:
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也可以設定,但這個場可以設定範圍。
4.2 放射重力場 Radial Gravity Field
要模拟一下月球繞着地球轉就得用這個,重力場在一個點上。
4.3 阻力場 Drag Field
在這個場就像一個物體運動遇到摩擦要減速,摩擦力取決于物體的速度
4.4 渦流場 Vortex Field
這個場可以用來制作龍卷風的效果,場的力繞着中心轉,如果strength為正就是逆時針,如果為負就是順時針
4.5 噪聲場 Noise Field 和 紊亂場 Turbulence Field
噪聲場就是每個位置受力情況随機,有個smoothness參數來調整噪聲力的平滑程度
紊亂場合噪聲場很接近,但對物體的影響較小
4.6 彈簧場 Spring Field
可以使物體像連接配接到了場中心的彈簧,會在場中心來回移動
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】