创建世界
var myWorld = new b2World(gravity,doSleep);
gravity为重力 一个b2Vec2(向量) 新建 一个向量类:new b2Vec2(0 ,9.8) 垂直方向用9.8来模拟地球重力
doSleep 是否休眠静止物体 设置为true 可以减少运算开销
新建刚体
b2Body 刚体类
新建刚体无需直接用new来实例化b2Body类,而是通过另外2个类辅助类来间接的新建刚体 b2BodyDef and b2FixtrueDef 如:
var myWorld = new b2World(gravity,doSleep) var bd= new b2BodyDef(); var bfd = new b2FixtrueDef(); var body1 = world.CreateBody(bd); body1.CreateFixtrue(bfd);
b2BodyDef 用来保存刚体的状态,以及运动相关的信息 如刚体的类型 角速度 速度 阻尼等
b2FixtrueDef 刚体自身所固有的一些属性 比如密度 弹性系数 形状
这里当我们用CreateBody把bd对象添加到新建刚体后 bd就跟body1没有任何关系了 这个时候 我们无需新建bd 直接利用已有的bd,就可以来创建其他的body (Fixtrue同理)
下面记录下b2BodyDef 与b2FixtureDef 相关属性:
b2BodyDef 中的属性 | ||
active | Boolean | 可用与否 |
allowSleep | Boolean | 允许睡眠与否 |
awake | Boolean | 活动与否 |
bullet | Boolean | bullet |
angle | Number | 角度 |
angularDamping | Number | 角速度阻尼 |
angularVelocity | Number | 角速度 |
fixedRotation | Boolean | 角度固定 |
inertiaScale | Number | 角速度惯性系数 |
linearDamping | Number | 线速度阻尼 |
linearVelocity | b2Vec2 | 线速度 |
position | b2Vec2 | 坐标 |
type | uint | 类型 |
userData | * | 自定义数据 |
b2FixtureDef 中的属性 | ||
density | Number | 密度 |
friction | Number | 摩擦系数 |
restitution | Number | 弹性系数 |
filter | b2FilterData | 碰撞过滤 |
isSensor | Boolean | 是否为传感器 |
shape | b2Shape | 形状 |
userData | * | 自定义数据 |
bodyDef的状态类属性:
bodyDef.position.Set(100/30,100/30);//刚体的位置设置
bodyDef.type = b2Body.b2_dynamicBody;//刚体类型 静态刚体:b2Body.b2_staticBody 可动刚体:b2Body.b2_dynamicBody 动态刚体:b2Body.b2_kinematicBody
bodyDef.active=false;刚体是否处于激活状态:如果为false 在更新的Bodylist 的时候 会直接跳过 可以通过body.SetActive(true)来修改其值 dody也有 IsActive() 来获取active
bodyDef.awake=false;刚体当前是否在唤醒状态 与active类似 暂时不只他们的区别
以上三个属性的都可以修改 通过修改他们 可以实现停止或开始 运行相关刚体
allowSleep:Boolean :刚体是否可以睡眠,默认为 true。 针对当前的刚体 对应的方法 IsSleepingAllowed():Boolean ;SetSleepingAllowed(flag:Boolean):void。
bullet:Boolean : 是否模拟高速子弹,开启 CCD 碰撞检测 ,默认为 false。 当运动速度很快的时候 刚体可能会穿透其他非静态刚体 ,开启bullet后 就不会出现出现这种类似bug的问题,但是他对性能的要求也更高 所以不宜开启过多的bullet刚体
bodyDef的角度 角速度类属性: