美文网首页Box学习
Box2D源码分析(刚体属性)

Box2D源码分析(刚体属性)

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-10-02 14:45 被阅读0次

上一讲看到了刚体属性,以及刚体的形状和创建过程,可以做自由下落,最后知道怎样显示出视图。这一节完成一些特殊的效果。
属性的两个属性类:bodyDef和fixtureDef,包含了所有的属性,对刚体的操作也是在这些属性上完成的。本章主要介绍属性的使用。

BodyDef

它包含了位置,类型,线速度。角速度等,属性分类:

  • 状态
    • active:是否可用 如果可用就会进行碰撞模拟,反之
    • alowSleep:是否允许睡眠 在停止下来的时候就会进入睡眠,当运动的时候就会唤醒。
    • awake:活动与否
    • bullet是否模拟高速子弹 防止穿堂而过。
  • 角度 角速度
    • angle:刚体角度
    • angularDamping:刚体旋转的角速度阻尼
    • angularVelocity:旋转角速度
    • fixedRotation:是否禁用刚体旋转
    • inertiaScale:刚体角速度惯性系数 质量只会影响,线性的惯性,而角速度的惯性需要通过这个参数来控制 如果这个参数为0的时候,那么角度将不会变
  • 坐标 速度
    • linearDamping:阻尼
    • linearVelocity:刚体线性速度
    • position:位置
  • 其他属性
    • type:
      静态:不可以运动的
      动态: 可以运动的
      可动刚体
    • userData:自定义属性

状态类属性

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

image.png
旋转点:围绕中心,旋转中心,一般的就是刚体重心的坐标点,也可以进行修改,比如不倒翁。
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

相关文章

  • Box2D源码分析(刚体属性)

    上一讲看到了刚体属性,以及刚体的形状和创建过程,可以做自由下落,最后知道怎样显示出视图。这一节完成一些特殊的效果。...

  • Box2d源码分析(刚体)

    概述中知道了什么是世界,如何模拟世界重力,以及时间步和另外两个参数的使用,以及意义。世界的存在,有了物体才可以更加...

  • laya2.0 box2d系列三 关节

    一、基础概念 参考拉小登博客 初识Box2D关节b2Joint 1.刚体rigidbody :刚体是指在运动中和受...

  • 【Box2D】物理引擎入门001

    一、什么是Box2D Box2D是一个强大的开源物理游戏引擎,用来模拟2D刚体物体运动和碰撞,由Erin Catt...

  • 刚体属性

    物理引擎 刚体组件 rigidbody Mass 质量单位 人物角色为1的话,别的对象如果带有刚体组件都会按着这个...

  • 属性动画原理

    Android 属性动画详解与源码分析

  • Box2d源码分析(概述)

    box2d是一个物理引擎,一般看到的是c++版本,这个源码分析,主要分析jbox2d。本部分介绍一个简单的案例,了...

  • 139 blender动力学-01

    一、设置简单场景 二、 设置刚体属性 1、给小球与平面,添加刚体属性,小球是活动项 平面是被动 形状属性:这个物体...

  • Flutter TextField 文本输入框的基本属性及详解

    源码分析: 分析源码可得,TextField 是有状态 StatefulWidget,有丰富的属性,自定义化较高,...

  • YYImage/YYModel/YYCache

    1.YYImage源码分析2.YYModel源码分析3.郑钦洪_:YYModel 源码历险记model属性赋值过程...

网友评论

    本文标题:Box2D源码分析(刚体属性)

    本文链接:https://www.haomeiwen.com/subject/qqjxnltx.html