创建一个Box2D物体

2022-05-24  本文已影响0人  大龙10

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录

5.5 创建一个Box2D物体


  下面让我们先创建一个Box2D物体。

1、第1步:定义一个物体

BodyDef bd = new BodyDef();  创建物体之前先创建定义

2、第2步:设置物体的定义

  如果想赋予物体某些初始属性,我们可以在物体的定义上设置这些属性。
  举个例子,起始位置就是物体的属性。
  假如我们想让物体处于Processing运行窗口的正中间。

Vec2 center = new Vec2(width/2, height/2);   Processing窗口正中间的位置向量

  这一行代码会将我们引入一个危险的方向,我不会在之后的每个例子中都这么提醒你。请记住,如果想在Box2D中指定物体的起始位置,你必须要用Box2D坐标表示这个位置!我们可能更习惯于用像素坐标表示一个位置,但Box2D并不关心我们的习惯。
\color{red}{因此在指定初始位置之前,请一定调用辅助函数进行坐标转换。}

Vec2 center = box2d.coordPixelsToWorld(width/2, height/2);  
转化为Box2D坐标后,位于Processingbd.postion.set(center);  
设置Box2D物体定义中的位置属性

  我们还要在定义中指定物体的“类型”,有如下3种可能的类型。

你还可以在定义中设置其他属性。比如,如果想让物体拥有固定的转动属性(即永远不旋转),你可以这么做:

bd.fixedRotation = true;

你还可以设置物体的线性阻尼和角速度阻尼,如果存在摩擦力,物体会因此减速。

bd.linearDamping = 0.8;
bd.angularDamping = 0.9;

除此之外,对于快速运动的物体,你必须把它的bullet属性设为true,这相当于告诉Box2D引擎:该物体的运动速度非常快,要更仔细地检查它的碰撞,防止它突然穿过其他物体。

bd.bullet = true;

3、第3步:创建物体

创建完定义(BodyDef)之后,我们就可以用这个定义创建物体了。
对此,PBox2D提供了一个辅助函数——createBody()函数。

Body body = box2d.createBody(bd);  
传入物体定义,创建物体(可以用同一个定义创建多个物体)

4、第4步:为物体的初始状态设置其他属性

最后一步不是必须的,但如果你想为物体设置其他初始属性,可以在新创建的物体对象上指定属性值,如线性速度或者角速度。

body.setLinearVelocity(new Vec2(0,3));  设置任意的初始速度
body.setAngularVelocity(1.2);  设置任意的初始角速度
上一篇 下一篇

猜你喜欢

热点阅读