CollisionShape上的NegativeArraySizeException

时间:2013-01-26 15:31:53

标签: java collision jmonkeyengine

我试图将碰撞形状放在我的模型上。 但每次我开始游戏时,都会收到NegativeArraySizeException。

private void createSoundBit(float x, float y, float z)
    {
        Spatial npc1 = assetManager.loadModel("Models/sound/sound.j3o");
        npcNode.attachChild(npc1);
        CollisionShape noteshape = CollisionShapeFactory.createDynamicMeshShape(npc1);
        npcRigid = new RigidBodyControl(noteshape,123.0f);
        npcRigid.setFriction(0f);
        npcRigid.setMass(60f);
        npcRigid.setPhysicsLocation(new Vector3f(x,y,z));
        collmanager = new CollManager();
        getPhysicsSpace().addCollisionListener(collmanager);

        npc1.addControl(npcRigid);
        bulletAppState.getPhysicsSpace().add(npcRigid);
        rootNode.attachChild(npcNode);
    }

我不知道为什么会发生

堆栈跟踪:

java.lang.NegativeArraySizeException
    at com.jme3.bullet.collision.shapes.HullCollisionShape.getPoints(HullCollisionShape.java:71)
    at com.jme3.bullet.collision.shapes.HullCollisionShape.<init>(HullCollisionShape.java:24)
    at com.jme3.bullet.util.CollisionShapeFactory.createSingleDynamicMeshShape(CollisionShapeFactory.java:241)
    at com.jme3.bullet.util.CollisionShapeFactory.createCompoundShape(CollisionShapeFactory.java:112)
    at com.jme3.bullet.util.CollisionShapeFactory.createCompoundShape(CollisionShapeFactory.java:94)
    at com.jme3.bullet.util.CollisionShapeFactory.createDynamicMeshShape(CollisionShapeFactory.java:188)
    at Main.createSoundBit(Main.java:206)
    at Main.simpleInitApp(Main.java:83)
    at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:225)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:130)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:207)
    at java.lang.Thread.run(Thread.java:722)

1 个答案:

答案 0 :(得分:0)

对我而言,它可能是以下两种情况之一:您的文件sound.j3o已损坏或jmonkeyengine中存在错误。尝试加载其他文件,看看发生了什么。部分来源是问题所在:

FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
vertices.rewind();
int components = mesh.getVertexCount() * 3;
float[] pointsArray = new float[components];
// ...

因此,看起来mesh.getVertexCount()返回负值。