Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 PolygonShape的主张带有“;面积>;1.19209289550781250000e-7F“;_Java_Libgdx_Box2d - Fatal编程技术网

Java PolygonShape的主张带有“;面积>;1.19209289550781250000e-7F“;

Java PolygonShape的主张带有“;面积>;1.19209289550781250000e-7F“;,java,libgdx,box2d,Java,Libgdx,Box2d,我正在做一个游戏,其中地板是随机生成的非凸多边形 多边形的顶点将传递给以下(伪代码)方法: 如果我理解正确的话,这是因为三角形太小了。 我能做些什么来避免这个问题,或者省去这些小三角形? 提前感谢第2点和第3点非常接近,也许这是图书馆不喜欢的 也许,您可以改进您的随机点生成器,以避免两点过于接近。解决此问题的一个粗略但有效的方法就是使用与Box2D相同的检查来触发断言。查看b2PolygonShape.cpp中决定是否触发此断言的函数内部的代码。将该代码复制(或移植)到您自己的程序中,以便您可以

我正在做一个游戏,其中地板是随机生成的非凸多边形

多边形的顶点将传递给以下(伪代码)方法:

如果我理解正确的话,这是因为三角形太小了。 我能做些什么来避免这个问题,或者省去这些小三角形? 提前感谢

第2点和第3点非常接近,也许这是图书馆不喜欢的


也许,您可以改进您的随机点生成器,以避免两点过于接近。

解决此问题的一个粗略但有效的方法就是使用与Box2D相同的检查来触发断言。查看b2PolygonShape.cpp中决定是否触发此断言的函数内部的代码。将该代码复制(或移植)到您自己的程序中,以便您可以先发制人地检查断言是否会触发。如果会触发,请不要创建该装置:)

您必须禁止创建小多边形。可以使用三角法(或查看方框2D源)确定面积。问题不只是太小的三角形,而是面积很小的三角形,例如,如果你有三个点,它们将构成一个面积很小的三角形:0,0-400,0.1-800,0(几乎是一条线段)
private void createPolygon (FloatArray vertices) {
        short[] triangleIndices = new EarClippingTriangulator()
                                            .computeTriangles(vertices)
                                                .items;
        myPolygon = new PolygonSprite(
                            new PolygonRegion(textureRegion, vertices.items, triangleIndices));
        //  myPolygon is correctly rendered
        //  now I want to create a Box2D static body with this shape
        PolygonShape myShape = new PolygonShape();
        Array<Vector2> vect = toVector2Array(vertices);
        for (int i = 0; i < triangleIndices.length / 3; i++) {
            // Error!
            myShape.set(new float[] {
                    vect.get(triangleIndices[3 * i + 0]).x,
                    vect.get(triangleIndices[3 * i + 0]).y,
                    vect.get(triangleIndices[3 * i + 1]).x,
                    vect.get(triangleIndices[3 * i + 1]).y,
                    vect.get(triangleIndices[3 * i + 2]).x,
                    vect.get(triangleIndices[3 * i + 2]).y });
            myBody.createFixture(myShape, 0);
        }
        
    }
- x1: -1061.4121;
- y1: -2178.179;
- x2: 888.95154;
- y2: -154.1218;
- x3: 888.98663;
- y3: -154.08865;