[原創]SpriteKit+Swift學習筆記(三)-dynamic參數

ground.physicsBody.dynamic = false
文檔裏的解釋是
A Boolean value that indicates whether the physics body is moved by the physics simulation.
含義爲:此物體是否會被模擬器移動,若是是true,則會受到模擬器影響,好比重力,力場,摩擦力,總之就是會被模擬器的物理屬性所影響,作相應的位移或旋轉。若是是false,則至關於釘在屏幕上,不會移動。是否設置動態,和碰撞檢測無關,只涉及是否會被模擬器移動。即使精靈帶有action,若是設置了dynamic爲true,也會受到物理模擬器影響。Even though the move action is still running, physics effects are also applied to the spaceship. node

以flappy bird爲例:看起來鳥是飛的,實際上是地面在向左「飛」,我我的建議單獨設置固定的物理邊框來作地面,而不是在移動的地面spritenode上設置physicsbody。這樣把地面和物理體面拆分開,調整起來也互不影響。地面的dynamic應該設置爲false,在物理模擬器裏,沒有地面與鳥的區別,都是spritenode或者node。在flappy bird中,必須存在重力,因此地面若是也受模擬器影響,那麼地面就會掉到模擬器底部,而地面應該是紋絲不動的,至少看起來是這樣。因此設置false以後,地面就不會收到任何影響,死守在本身的崗位上。水管,也是一樣的道理,水管必須是堅如盤石的,同時也不能掉落到模擬器底部。至於鳥,該不應設置false呢?要分狀況。遊戲剛開始時,鳥不須要點擊也要停留在空中,這時鳥是false的,遊戲開始之後,點擊須要給鳥設置衝力,這時就須要設置其爲true,不然鳥不會受到任何物理效果的影響。鳥的速度,衝力,質量這些屬性都是由模擬器完成的,若是模擬器沒法控制鳥,那麼鳥就會一直呆在原地。app

總結來講,就是障礙,地面,小物件等須要固定在某個位置,不受模擬器任何影響的東西,須要設置dynamic爲false。角色,能夠被移動,破壞,摧毀的物件或道具,須要設置爲true,以正確模擬物理效果。spa

相關文章
相關標籤/搜索