1.19209289550781250000e-7F"断言-6ren"> 1.19209289550781250000e-7F"断言-我正在制作一款游戏,其中地板是随机生成的非凸多边形。 多边形的顶点被传递给以下(伪代码)方法: private void createPolygon (FloatArray vertices) { -6ren">
gpt4 book ai didi

java - PolygonShape 用 "area > 1.19209289550781250000e-7F"断言

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:12 24 4
gpt4 key购买 nike

我正在制作一款游戏,其中地板是随机生成的非凸多边形。

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

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);
}

}

通常该方法运行良好,但有时游戏会崩溃:

AL lib: (EE) alc_cleanup: 1 device not closed
Assertion failed!
Program: C:\Program Files\Java\jre1.8.0_25\bin\javaw.exe
File: /var/lib/jenkins/workspace/libgdx/extensions/gdx-box2d/gdx-box2d/jni/Box2D/Collision/Shapes/b2PolygonShape.cpp, Line 158
or 223

Expression: false

Expression: area > 1.19209289550781250000e-7F

传递给“myShape.set()”的float[]包含(当它崩溃时):

- x1: -1061.4121;
- y1: -2178.179;
- x2: 888.95154;
- y2: -154.1218;
- x3: 888.98663;
- y3: -154.08865;

如果我没理解错的话,这是因为三角形太小了。我该怎么做才能避免这个问题,或者忽略这些小三角形?提前致谢

最佳答案

第 2 点和第 3 点非常接近,这可能是图书馆不喜欢的地方。

也许,您可以改进您的随机点生成器以避免两个点太靠近。

关于java - PolygonShape 用 "area > 1.19209289550781250000e-7F"断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com