Бесконечно создаётся тело box2d

113
26 июля 2019, 02:50

Динамическое тело ball должно создаваться один раз, но вместо этого происходит вот это:

public class Main extends ApplicationAdapter {
OrthographicCamera cam;
final float TIME_STEP = 60f;
final int VELOCITY_ITERATIONS = 6;
final int POSITION_ITERATIONS = 2;
public static final int WIDTH  = 480;
public static final int HEIGHT = 720;
World world;
Box2DDebugRenderer debugRenderer;
Body bat;
ArrayList<Body> ballList = new ArrayList<Body>();
@Override
public void create () {
    world = new World(new Vector2(0,-10),true);
    debugRenderer = new Box2DDebugRenderer();
    world.setContactListener(new BrickContactListener());
    cam = new OrthographicCamera(WIDTH,HEIGHT);
    initObjects();
}
@Override
public void render () {
    debugRenderer.render(world,cam.combined);
    world.step(TIME_STEP,VELOCITY_ITERATIONS,POSITION_ITERATIONS);
}
@Override
public void dispose () {
    world.dispose();
}
private void initObjects(){
    bat = createBat();
    createBall(0,0);
    //createBricks();
}
private Body createBat(){
    Body bat;
    BodyDef batBodyDef = new BodyDef();
    batBodyDef.type = BodyDef.BodyType.KinematicBody;
    batBodyDef.fixedRotation = true;
    batBodyDef.position.set(0,-HEIGHT/2+HEIGHT/8);
    bat = world.createBody(batBodyDef);
    PolygonShape polygonShape = new PolygonShape();
    polygonShape.setAsBox(50,10);
    bat.createFixture(polygonShape,10f);
    polygonShape.dispose();
    return bat;
}
private void createBall(float x,float y){
    Body ball;
    BodyDef ballBodyDef = new BodyDef();
    ballBodyDef.type = BodyDef.BodyType.DynamicBody;
    ballBodyDef.position.set(x,y);
    ball = world.createBody(ballBodyDef);
    CircleShape circleShape = new CircleShape();
    circleShape.setRadius(10f);
    ball.createFixture(circleShape,1f);
    circleShape.dispose();
    ballList.add(ball);
}
Answer 1

С созданием объектов у тебя все верно. Нужно проcто очистить экран:

public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    debugRenderer.render(world,cam.combined);
    world.step(TIME_STEP,VELOCITY_ITERATIONS,POSITION_ITERATIONS);
}
READ ALSO
Можно ли как-то клонировать JLabel в Java?

Можно ли как-то клонировать JLabel в Java?

В общем мне нужно что-то типа стрельбы из автомата для небольшого проекта, но я совсем недавно стал изучать Java поэтому не знаю какПо сути вся...

131
JavaFX и многопоточность

JavaFX и многопоточность

Задача - при нажатии на определенную кнопку программы (JavaFX GUI) запустить гифку ожидания, которая будет крутиться, пока вполняется основной...

127
Упростить дерево стилей css

Упростить дерево стилей css

Как можно упростить стили (паддинг можно применять только к a):

141