Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向绘制的线添加动态物理实体_Java_Android_Libgdx_Box2d_Jbox2d - Fatal编程技术网

Java 向绘制的线添加动态物理实体

Java 向绘制的线添加动态物理实体,java,android,libgdx,box2d,jbox2d,Java,Android,Libgdx,Box2d,Jbox2d,我正在开发一个类似于libGDX()上的“蜡笔物理豪华版”的机械游戏。我被困在绘图的算法实现上。问题是动力学实体不能与边形和链形一起使用。我曾尝试使用一种多边形化算法,但它的工作原理与“蜡笔物理”不完全相同,并且产生了很多错误 有没有办法向绘制的图形中添加动态实体?最后,我解决了连接矩形的问题。具体方法如下。该过程包括3个部分: 1.-减少用户输入 为了提高性能,我定义了一个公差距离:每个点都必须通过定义的公差距离与上一个点分开 2.-平滑输入 为了避免尖峰和锯齿状的角点,我使用了Chaikin

我正在开发一个类似于libGDX()上的“蜡笔物理豪华版”的机械游戏。我被困在绘图的算法实现上。问题是动力学实体不能与边形和链形一起使用。我曾尝试使用一种多边形化算法,但它的工作原理与“蜡笔物理”不完全相同,并且产生了很多错误


有没有办法向绘制的图形中添加动态实体?

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

1.-减少用户输入

为了提高性能,我定义了一个公差距离:每个点都必须通过定义的公差距离与上一个点分开

2.-平滑输入

为了避免尖峰和锯齿状的角点,我使用了Chaikin平滑算法的一次迭代。()

3.-构建一行矩形

一旦我们对输入进行了处理和平滑,最后一步就是构建物理体。该实体将具有多个矩形 固定设施具体地说,点的数量/2个装置,因为我们将每两点构造一个矩形。下一张图说明了该过程:

这就是实现它的代码:

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;
}
私有静态主体createPhysicBodies(数组输入,世界){
BodyDef BodyDef=新的BodyDef();
bodyDef.type=BodyType.DynamicBody;
Body Body=world.createBody(bodyDef);
对于(int i=0;i