上一讲看到了刚体属性,以及刚体的形状和创建过程,可以做自由下落,最后知道怎样显示出视图。这一节完成一些特殊的效果。
属性的两个属性类:bodyDef和fixtureDef,包含了所有的属性,对刚体的操作也是在这些属性上完成的。本章主要介绍属性的使用。
BodyDef
它包含了位置,类型,线速度。角速度等,属性分类:
- 状态
- active:是否可用 如果可用就会进行碰撞模拟,反之
- alowSleep:是否允许睡眠 在停止下来的时候就会进入睡眠,当运动的时候就会唤醒。
- awake:活动与否
- bullet是否模拟高速子弹 防止穿堂而过。
- 角度 角速度
- angle:刚体角度
- angularDamping:刚体旋转的角速度阻尼
- angularVelocity:旋转角速度
- fixedRotation:是否禁用刚体旋转
- inertiaScale:刚体角速度惯性系数 质量只会影响,线性的惯性,而角速度的惯性需要通过这个参数来控制 如果这个参数为0的时候,那么角度将不会变
- 坐标 速度
- linearDamping:阻尼
- linearVelocity:刚体线性速度
- position:位置
- 其他属性
- type:
静态:不可以运动的
动态: 可以运动的
可动刚体 - userData:自定义属性
- type:
状态类属性
active
刚体是不是处于激活状态,如果是false,那么在模拟的过程中就会被忽略掉,一般的如果超出渲染范围的可以设置为false .
举例子:如果某个刚体被设置为false,上面下落一个物体就直接穿堂而过,不进行任何的模拟操作;
awake
当前是不是处于唤醒状态,物体在运行的过程中,精致 的时候会标记为睡眠,发生碰撞的时候就会唤醒。一般的时候是不需要进行设置的,他一般的会进行自己操作的。
allowSleep
是否可以睡眠,默认为true,allowSleep和world中的一样,只不过作用的范围不同。
Bullet
是否模拟高速的子弹,开启CCD碰撞,默认是false,这个是为了防止高速运动的物体发生碰撞,容易穿透而设定的,需要比较大的运算开支,所以开启的不易太多。
角度、角速度类属性
angle:刚体的角度,是一个弧度值,转换关系:1弧度 = 180 / Math.PI。
angularVelocity:刚体的角速度 单位为弧度/秒,所以使用的时候需要进行转换,比较熟悉的单位通常是度/帧。假如渲染帧fps,那么弧度/秒和度/帧的关系如下:
弧度:1rad
秒:1s
弧度/秒:1rad/s
度:180/Math.PI
帧:fps
度/帧 :180/Math.PI / fps
旋转点:围绕中心,旋转中心,一般的就是刚体重心的坐标点,也可以进行修改,比如不倒翁。
angularDamping角速度阻尼,旋转摩擦力。他的范围是0~1之间,取值越大角速度降低的越快。
比如旋转加上阻尼就会很快的慢下来。
inertiaScale:角速度惯性系数,它可以为非负数,质量越大,惯性越大,移动的速度和角度也很难改变。质量只会影响惯性系数,旋转的惯性剋通过设置,角速度惯性系数越大,角速度变化的就越慢,如果角速度的惯性系数为0,那么角度就会一直保持不变。
fixedRotation:是否禁止旋转,刚体发生碰撞后不发生改变
坐标 速度类属性
- positiin:刚体坐标,同时 也是刚体本地系统的坐标原点
一般的直接修改刚体的坐标,实现刚体瞬间移动的效果。位置的读写方法getPosition和setPosition,使用setPostion进行更新需要谨慎。 - linearVelocity:刚体的线性速度 ,m/s,转换关系,30帧的时候 1m/s = 1px/f
- linearDamping:线性阻尼,取值范围0~1,线性阻尼越大,刚体运动速度变化越慢。
使用场景,如果在太空中翱翔,不受到 摩檫力,可以通过这个参数让它们停下来。它的读写方法getLinearDamping()和setLinearDamping.
初始的时候属性都为0,在设置了线性速度之后,它保持相同的运动轨迹,然后设置了阻尼就会慢慢的停下来。
其他属性
type:静态 动态 可动
- staticBoduy:静态刚体 碰撞后不进行反弹,不受到外力的影响。一般在游戏中台子等使用静态。
- kinermaticBody:可动刚体,和静态的类似,碰撞之后不反弹,但是可以运动。看可以 设置setLineatVelocity和setAnfularVelocity可以添加速度,可以作位电梯效果。
- dynamicBody:动态刚体,可以运动,碰撞后会进行反弹、变向等响应刚体。
bullet只会针对动态刚体有效果,静态的刚体和可动的刚体默认都是按照true设置的会进行连续检测。这也就是可以穿过障碍物,但是不会穿过墙
如果在运行的过程中突然改变刚体的类型,那么就会立即停止,就像冻住了一样。
FixtureDef
主要 保存了刚体特性方面的属性,比如密度、表面摩檫力、弹性系数等
分类可以分为:
- 特质特性
(1)density:密度 : 密度如果设置为0,则会强制设置为1 ,体积越大,惯性越大,维持当前状态的力就越大。
(2)friction:摩擦系数 摩檫力和阻尼不是一回事,虽然都会降低速度,但是摩檫力可以模拟出冰面等。
(3)restitution:弹性系数 可以模拟出撞击到地面,水泥面等上面的特性。 - 碰撞 特性
(1)filter:碰撞过滤:就是对刚体分类别,那些可以撞击,那些不可以撞击
(2)是否为传感器 : 值进行碰撞,但是不进行碰撞模拟 - 形状
(1)Shape:形状 - 自定义
(1)userdata
网友评论