当前位置:嗨网首页>书籍在线阅读

32-在Box2D中定义墙

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.6.7 在Box2D中定义墙

现在,墙的宽度和高度已经基于MTS单位进行了定义,可以将墙定义为Box2D对象了。首先创建一个数组保存墙对象,然后遍历wallDefs数据,创建4面墙作为屏幕的边界。

var walls = new Array();
for (var i = 0; i <wallDefs.length; i++) {

接下来,通过创建一个b2BodyDef的实例来定义一面墙。一个b2BodyDef对象用于保存和定义一个刚体的所有数据。如前所述,一个刚体需要在其上对应一个shape和一个fixtrue,这样才能创建一个可以操作的Box2D对象。将类型设置为b2_staticBody,这意味着该对象用于不会移动,并且其质量无限大。这对于作为画布边界的墙来说再合适不过了。接下来,使用数组中的对象的位置属性设置wallDef的位置信息。最后,调用world.createBody(wallDef)方法,基于b2BodyDef对象中的定义在Box2D中创建一个刚体。

var wallDef = new b2BodyDef;
wallDef.type = b2Body.b2_staticBody;
wallDef.position.Set(wallDefs[i].x, wallDefs[i].y);
var newWall = world.CreateBody(wallDef)

接下来,为强创建一个fixture的定义。fixture用于绑定到一个刚体的形状,其中包含了Box2D对象的属性。首先,创建一个新的b2FixtureDef对象,然后设置desity(单位体积的质量)、friction(阻力,通常在0~1之间)以及restitution(弹性,通常在0~1)。

var wallFixture = new b2FixtureDef;
wallFixture.density = 10.0;
wallFixture.friction = 0.5;
wallFixture.restitution = 1;

拥有fixture之后,还需要创建shape。将fixture的shape属性设置为b2PolygonShape对象,然后调用shape对象的setAsBox()方法(需传入墙的宽度和高度)完成形状的定义。接下来,调用刚体对象的createFixture()方法,传入wallFixture参数。这将为刚体设置fixture和shape。最后,将刚体加入到墙体数组中。

   wallFixture.shape = new b2PolygonShape;
   wallFixture.shape.SetAsBox(wallDefs[i].w, wallDefs[i].h);
   newWall.CreateFixture(wallFixture);
   walls.push(newWall);
}