Я пытаюсь создать куски, объединив box2d Bodies, я не знаю, применим ли объединение libgdx к телам, но если это, пожалуйста, кто-нибудь объяснит мне, как это сделать и что не так с моим кодом.Объединение корпусов Box2d?
Сначала я создал BodyDef и тело на отдельно методы:
public BodyDef createDef(){
BodyDef def = new BodyDef();
def.type = BodyDef.BodyType.StaticBody;
def.fixedRotation = true;
def.position.set(6, 6);
return(def);
}
public Body createBody(){
Body body = world.createBody(createDef());
PolygonShape shape = new PolygonShape();
shape.setAsBox(1, 1);
body.createFixture(shape, 1.0f);
shape.dispose();
return(body);
}
public void createPlatform(){
Body platform = Pools.obtain(Body.class); //then use pooling
platform = createBody(); //here I set the value equal to the return value of createBody() method
bodies.add(platform);//adding platform to the ArrayList
}
затем на нерест куски я просто называю этот метод:
public void spawnChunk(){
createPlatform();
}
Я так новичок в этом я не знаете, что такое значение куска, но я знаю, что используется в игре с прокруткой на нерестилища, Я получаю это сообщение об ошибке:
Exception in thread "LWJGL Application" java.lang.RuntimeException: Class cannot be created (missing no-arg constructor): com.badlogic.gdx.physics.box2d.Body
at com.badlogic.gdx.utils.ReflectionPool.<init>(ReflectionPool.java:41)
at com.badlogic.gdx.utils.Pools.get(Pools.java:29)
at com.badlogic.gdx.utils.Pools.get(Pools.java:38)
at com.badlogic.gdx.utils.Pools.obtain(Pools.java:48)
at com.nivekbryan.ragingpotato.Physics.createPlatform(Physics.java:53)
at com.nivekbryan.ragingpotato.Physics.spawnChunk(Physics.java:59)
at com.nivekbryan.ragingpotato.WorldController.update(WorldController.java:17)
at com.nivekbryan.ragingpotato.MainClass.render(MainClass.java:27)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Что такое getFromPool()?вы установили pooledBody равным телу, у которого уже есть def и fixture? а затем создать pooledBody? –
'getFromPool();' это просто произвольный метод, показывающий, что вы получили тело из пула. но, как я уже сказал, не делайте этого, создайте box2d wiki: «Итак, когда вы создаете b2Body или b2Joint, вам нужно вызвать заводские функции на b2World. Вы никогда не должны пытаться выделять эти типы другим способом. « –
Я просто понял, что, поскольку я не смогу использовать объединение на телах, использование массива бесполезно, потому что мой план состоял в том, чтобы объединить тело, а затем добавить его в массив и удалите его, когда это не нужно. Как я могу это сделать без объединения? всегда создавая новый, а затем удаляя его, это плохая идея, потому что он потребляет больше памяти. –