将动态物理实体添加到绘制线

时间:2015-02-03 01:14:38

标签: java android libgdx box2d jbox2d

我正在libGDX(https://www.youtube.com/watch?v=avkacGQKWec)开发一款与“Crayon Physics Deluxe”相似的机械游戏。我坚持绘制的算法实现。问题是动态主体不适用于EdgeShapes和ChainShapes。我尝试过使用多边形算法,但它不像“蜡笔物理”那样工作,并且会产生很多错误。

有没有办法为绘制的?

添加动态主体

1 个答案:

答案 0 :(得分:0)

最后,我解决了连接矩形的问题。该方法详述如下。该过程包括3个部分:

1.-减少用户输入

为了提高性能,我已经定义了一个公差距离:每个点都必须与之前的公差距离分开。

2.-平滑输入

为了避免出现峰值和锯齿状的角落,我使用了Chaikin平滑算法的一次迭代。(http://www.idav.ucdavis.edu/education/CAGDNotes/Chaikins-Algorithm/Chaikins-Algorithm.html

3.-构建一系列矩形

一旦我们对输入进行了处理和平滑处理,最后一步就是构建de physic body。那个体将有一个多个矩形 灯具。具体而言, NUMBER_OF_POINTS / 2 装置,因为我们每两个点构造一个矩形。下一个绘图说明了这个过程:

Drawing of the process

这就是获得它的代码:

private static Body createPhysicBodies(Array<Vector2> input, World world) {
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    Body body = world.createBody(bodyDef);
    for (int i = 0; i < input.size - 1; i++) {
        Vector2 point = input.get(i);
        Vector2 dir = input.get(i + 1).cpy().sub(point);
        float distance = dir.len();
        float angle = dir.angle() * MathUtils.degreesToRadians;
        PolygonShape shape = new PolygonShape();    
        shape.setAsBox(distance / 2, Constants.THICKNESS / 2, dir.cpy()
                .scl(0.5f).add(point), angle);
        body.createFixture(shape, 1.0f);
    }
    return body;
}
相关问题