Я просто пытаюсь отобразить тело Box2D на экране.Box2D Корпус не отображается и не разбивается
Вот мой основной код класса:
public class Core extends ApplicationAdapter {
private World world;
private Box2DDebugRenderer rend;
EntityParent p;
private OrthographicCamera cam;
@Override
public void create() {
cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.setToOrtho(false);
cam.viewportWidth = 640;
cam.viewportHeight = 480;
world = new World(new Vector2(0, -9.81f), true);
rend = new Box2DDebugRenderer();
p = new EntityParent(world, new Vector2(100, 100), BodyType.DynamicBody);
p.initBodyVariables(1, 1, 1);
p.createCircle(50);
}
@Override
public void render() {
cam.update();
world.step(1/60f, 6, 2);
System.out.println(p.getPosition());
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
rend.render(world, cam.combined);
}
}
И это кодEntityParent
:
package com.reality.entity;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
public class EntityParent implements Entity{
/*
* Used for initializing the body
*/
protected Vector2 position;
protected World world;
/*
* All definitions for creating the body
*/
protected BodyType type;
protected BodyDef bodyDef;
protected Body body;
protected FixtureDef fixtureDef;
protected Fixture fixture;
protected float density, friction, restitution;
/**
* Puts body by default at (0,0)
* @param world
* @param type
*/
public EntityParent(World world, BodyType type){
this.world = world;
this.type = type;
this.position = new Vector2(0, 0);
}
/**
*
* @param world
* @param position of body
* @param type
*/
public EntityParent(World world, Vector2 position, BodyType type){
this.world = world;
this.position = position;
this.type = type;
}
/**
*
* @param world
* @param x position of body
* @param y position of body
* @param type
*/
public EntityParent(World world, float x, float y, BodyType type){
this.world = world;
this.position = new Vector2(x, y);
this.type = type;
}
public void initBodyVariables(float density, float friction, float restitution){
this.density = density;
this.friction = friction;
this.restitution = restitution;
}
@Override
public void createPolygonBody(float[] vertices) {
bodyDef = new BodyDef();
bodyDef.type = type;
bodyDef.position.set(position);
body = world.createBody(bodyDef);
PolygonShape shape = new PolygonShape();
shape.set(vertices);
fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = density;
fixtureDef.friction = friction;
fixtureDef.restitution = restitution;
fixture = body.createFixture(fixtureDef);
shape.dispose();
}
@Override
public void createRectangle(Vector2 dimensions) {
bodyDef = new BodyDef();
bodyDef.type = type;
bodyDef.position.set(position);
body = world.createBody(bodyDef);
PolygonShape shape = new PolygonShape();
shape.setAsBox(dimensions.x, dimensions.y);
fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = density;
fixtureDef.friction = friction;
fixtureDef.restitution = restitution;
fixture = body.createFixture(fixtureDef);
shape.dispose();
}
@Override
public void createCircle(float radius) {
bodyDef = new BodyDef();
bodyDef.type = type;
bodyDef.position.set(position);
body = world.createBody(bodyDef);
PolygonShape shape = new PolygonShape();
shape.setRadius(radius);
fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = density;
fixtureDef.friction = friction;
fixtureDef.restitution = restitution;
fixture = body.createFixture(fixtureDef);
shape.dispose();
}
@Override
public void update() {
}
@Override
public void render(Box2DDebugRenderer renderer) {
}
@Override
public Vector2 getPosition() {
return this.position;
}
}
Так ж шляпа происходит, когда я запускаю это я получаю следующее сообщение об ошибке:
AL lib: (EE) alc_cleanup: 1 device not closed
Assertion failed!
Program: C:\Program Files\Java\jre1.8.0_60\bin\javaw.exe
File: /var/lib/jenkins/workspace/libgdx/extensions/gdx-box2d/gdx-box2d/jni/Box2D/Collision/Shapes/b2PolygonShape.cpp, Line 384
Expression: m_count >= 3
Если я избавлюсь от заявления от базового класса p.initBodyVariables (1, 1, 1);
Я просто получаю пустой экран.
Я тестировал, был ли это мир, и мир сказал, что в нем есть одно тело, поэтому он регистрируется, но я просто не понимаю, почему он выбрасывает эту ошибку, а не делает вообще. Любая помощь очень благодарна спасибо!