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