美文网首页
弯曲的边界

弯曲的边界

作者: 大龙10 | 来源:发表于2022-06-02 06:01 被阅读0次

    书名:代码本色:用编程模拟自然系统
    作者: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对象


    相关文章

      网友评论

          本文标题:弯曲的边界

          本文链接:https://www.haomeiwen.com/subject/gftpprtx.html