使用 jbox2d 创建 PolygonShape 时出现 OutOfBounds 异常

问题描述 投票:0回答:0

我正在尝试在 jbox2d TestBed 中创建一个带有夹具的主体,该夹具有 9 个顶点。 当我尝试运行测试时,出现以下错误:

Exception in thread "Testbed" java.lang.ArrayIndexOutOfBoundsException: 8
    at org.jbox2d.collision.Distance$DistanceProxy.set(Distance.java:510)
    at org.jbox2d.dynamics.World.solveTOI(World.java:1326)
    at org.jbox2d.dynamics.World.step(World.java:642)
    at org.jbox2d.testbed.framework.TestbedTest.step(TestbedTest.java:447)
    at org.jbox2d.testbed.tests.FixtureTest.step(FixtureTest.java:34)
    at org.jbox2d.testbed.framework.AbstractTestbedController.updateTest(AbstractTestbedController.java:274)
    at org.jbox2d.testbed.framework.AbstractTestbedController.render(AbstractTestbedController.java:406)
    at org.jbox2d.testbed.framework.AbstractTestbedController.stepAndRender(AbstractTestbedController.java:392)
    at org.jbox2d.testbed.framework.TestbedController.stepAndRender(TestbedController.java:68)
    at org.jbox2d.testbed.framework.TestbedController.run(TestbedController.java:62)
    at java.lang.Thread.run(Thread.java:745)

此错误仅在我更改顶点的限制时发生。如果我不改变它,当我运行测试时,我得到一个只有 8 个顶点的夹具,数组的最后一个顶点被忽略。

这是我为创建夹具所做的,我无法弄清楚我做错了什么:

        Settings.maxPolygonVertices = 20;

        BodyDef myBodyDef = new BodyDef();
        myBodyDef2.type = BodyType.DYNAMIC;
        myBodyDef2.position.set(new Vec2(2,0.925F));
        
        Body egg = m_world.createBody(myBodyDef);        
        
        vertices = new Vec2[9];
        vertices[0] = new Vec2(-0.1f,0.4f);
        vertices[1] = new Vec2(-0.2f,0.3f);
        vertices[2] = new Vec2(-0.3f,0.1f);
        vertices[3] = new Vec2(-0.3f,-0.1f);
        vertices[4] = new Vec2(-0.2f,-0.3f);
        vertices[5] = new Vec2(0.1f,-0.3f);
        vertices[6] = new Vec2(0.2f,-0.1f);
        vertices[7] = new Vec2(0.2f,0.1f);
        vertices[8] = new Vec2(0.1f,0.3f);

        PolygonShape myPolygonShape = new PolygonShape();
        myPolygonShape.set(vertices, 9);

        FixtureDef myFixtureDef = new FixtureDef();
        myFixtureDef.shape = myPolygonShape;
        myFixtureDef.restitution = 0.4f;
        myFixtureDef.density = 1;
        myFixtureDef.friction = 1f;
        egg.createFixture(myFixtureDef);
java box2d jbox2d
© www.soinside.com 2019 - 2024. All rights reserved.