【从0开始学Laya】15-2d物理引擎(1)-概念

经典的物理游戏如:愤怒的小鸟,小鳄鱼顽皮爱洗澡等,都是用物理系统制作。
2D物理引擎由刚体和碰撞体以及关节构成。
当物体包含碰撞体的时候物体可以发生碰撞,当物体含有碰撞体不含有刚体的时候可以被碰撞但不发生物理运动学动力影响
开发者可以不用关心物体是怎么碰撞的,laya引擎底层已经帮我们做好,开发者只要给想要做碰撞的物体挂上相应的碰撞体以及刚体组件即可。

刚体rigidbody :刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体,比如模拟铅球,石头等。
碰撞体collider:碰撞体是给物体加一个判定框,当碰撞框重叠的时候,两物体发生碰撞,这是碰撞的检测区域。
关节joint: 关节可以对两个或多个物体进行一种约束,可选。

Laya 2D物理引擎支持的关节有:

  1. 距离关节DistanceJoint:两个物体上面各自有一点,两点之间的距离固定不变。
  2. 齿轮关节GearJoint:用来模拟两个齿轮间的约束关系,齿轮旋转时,产生的动量有两种输出方式,一种是齿轮本身的角速度,另一种是齿轮表面的线速度。
  3. 马达关节MotorJoint:用来限制两个刚体,使其相对位置和角度保持不变,马达关节永远向目标点移动,并且保持特定的角度。
  4. 鼠标关节MouseJoint:用于鼠标操控物体。它试图将物体拖向当前鼠标光标的位置。而在旋转方面就没有限制。
  5. 平移关节PrismaticJoint : 移动关节允许两个物体沿指定轴相对移动,它会阻止相对旋转。
  6. 滑轮关节PulleyJoint:它将两个物体接地(ground)并彼此连接,当一个物体上升,另一个物体就会下降。
  7. 旋转关节RevoluteJiont:强制两个物体共享一个锚点,两个物体相对旋转。
  8. 绳索关节RopeJoint :限制两个点之间的最大距离。即使在很大的负载下也阻止连接的物体之间的拉伸。
  9. 焊接关节WeldJoint:使两个物体不能相对运动,两个刚体的相对位置和角度都保持不变,像一个整体。
  10. 轮子关节WheelJoint:围绕节点旋转,包含弹性属性,使得刚体在节点位置发生弹性偏移。

刚体RigidBody

RigidBody类继承自 Component,刚体支持三种类型:static,dynamic和kinematic,默认为dynamic。

  1. static为静态类型,静止不动,不受重力影响,质量无限大,可以通过节点移动,旋转,缩放进行控制;
    在模拟环境下静态物体是不会移动的,就好像有无限大的质量。在Box2D的内部会将质量至反,存储为零。静态物体有零速度。静态物体不能和其它静态或运动学物体进行碰撞。
  2. dynamic为动态类型,受重力影响;
    动态物体可以进行全模拟。它们可以被用户手动移动,但是通常情况下会根据受力进行移动。动态物体可以和任何物体发生碰撞。动态物体总是拥有有限的非零质量。如果你尝试设置动态物体的质量为零,它会自动设置一个1千克质量的物体。
  3. kinematic为运动类型,不受重力影响,可以通过施加速度或者力的方式使其运动。

属性说明

1)gravityScale
重力缩放系数,默认为1,即正常重力,设置为0为没有重力。
2)angularVelocity
角速度,设置会导致旋转,单位为弧度,实际使用中需要约束。
3)angularDampin
旋转速度阻尼系数,范围从0到无穷大,0表示没有阻尼,无穷大表示满阻尼,通常阻尼的值应该在0到0.1之间。
4)linearVelocity
线性运动速度,需要输入向量,比如10,10,代表x轴向右速度10,y轴向下速度10。
5)linearDamping
线性速度阻尼系数,范围从0到无穷大,0表示没有阻尼,无穷大表示满阻尼,通常阻尼的值应该在0到0.1之间。
6)bullet
是否高速移动的物体,设置为true,可以防止高速穿透。
7)allowSleep
是否允许休眠,允许休眠能提高性能,这个一般都要设置为true
8)allowRotation
是否允许旋转,如果不希望刚体旋转,这设置为false。
9)group
指定了该主体所属的碰撞组,默认为0.

碰撞体Collider

碰撞体类型分为以下4种:

  1. 矩形碰撞体
  2. 圆形碰撞体
  3. 线形碰撞体
  4. 多边形碰撞体

基类共有属性说明

1)x,y
相对节点x,y轴偏移。
2)friction
摩擦力,取值范围0-1,值越大,摩擦越大,默认值为0.2。
3)restitution
弹性系数,取值范围0-1,值越大,弹性越大,默认值为0。
4)density
密度值,值可以为零或者是正数,建议使用相似的密度,这样做可以改善堆叠稳定性,默认值为10。
5)isSensor
是否是传感器,传感器能够触发碰撞事件,但不会产生碰撞反应。可以理解为Trigger。
6)label
自定义标签

矩形碰撞体


属性说明
1)width,height
矩形的宽度和高度。
2)fitsize按钮
点一下这个按钮,碰撞体的大小就会自适应为节点宽高。

圆形碰撞体

图1
radius

圆的半径,必须为正数。

线形碰撞体

points

用逗号隔开的点的集合,格式:x,y,x,y … 设置点之后,从第一个点依次连接到最后一个点的连线即为线形碰撞体。在编辑器中,在线上单击左键增加一个点,点可以拖拽,双击点会删除这个点。

多边形碰撞体

points

用逗号隔开的点的集合,格式:x,y,x,y ..
2D多边形碰撞体,暂时不支持凹多边形,如果是凹多边形,先手动拆分为多个凸多边形
节点个数最多是b2_maxPolygonVertices,这数值默认是8,所以点的数量不建议超过8个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345