书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录
5.9 弯曲的边界
如果你希望固定边界的表面是弯曲的(而不是一个多边形),ChainShape类能帮你实现这种效果。
ChainShape类和PolygonShape类、CircleShape类相似,因此,我们可以用相同的步骤将它加入我们的程序。
1、第1步:定义一个物体
BodyDef db = new BodyDef(); 物体不需要位置,ChainShape会帮我们指定位置;也不需要设置
typeBody body = box2d.world.createBody(bd);
2、第2步:定义形状
ChainShape chain = new ChainShape();
3、第3步:配置形状
ChainShape对象代表一组相连的边。为了创建这样的链对象,我们必须先定义一个顶点(Vertice)数组(由Vec2对象组成的数组)。举个例子,如果我们想创建一条穿过整个窗口的直线,数组中只需要有两个顶点:(0,150)和(width,150)。(如果你想创建首尾相连的圈,也就是第一个顶点和最后一个顶点相连,可以使用ChainLoop类。)
Vec2[] vertices = new Vec2[2];
vertices[0] = box2d.coordPixelsToWorld(0,150); 加入屏幕右端的顶点
vertices[1] = box2d.coordPixelsToWorld(width,150); 加入屏幕左端的顶点
为了根据这些顶点创建链,我们需要将数组传入createChain()函数。
chain.createChain(vertices, vertices.length);如果你不想使用整个数组来创建链,可以传入
4、第4步:使用夹具将形状连接到物体上
形状只有在和物体相连之后才能成为Box2D的一部分。尽管这是个固定的边界,它还是需要被连接在物体上。和其他形状一样,ChainShape对象也有摩擦和复原等属性,我们可以通过夹具(Fixture)设置这些属性。
FixtureDef fd = new FixtureDef();
fd.shape = chain; 分配给ChainShape对象的夹具
fd.density = 1;
fd.friction = 0.3;
fd.restitution = 0.5;
body.createFixture(fd);
现在,我们要把ChainShape对象加入Sketch,方法和前面的固定边界一样。我们可以用Surface类完成这项工作。
5、示例
示例代码5-3 由3个固定顶点确定的ChainShape对象
网友评论