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