Не отскакивает тело box2d

124
11 августа 2019, 18:30

При столкновении с другим телом ball либо останавливается, либо двигается вдоль него. Вроде как это может происходить из-за неправильного world scale, но не знаю, как его поменять. Ниже методы создания тел:

 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);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.density = 1f;
    fixtureDef.restitution = 1f;
    fixtureDef.friction = 0;
    fixtureDef.shape = polygonShape;
    bat.createFixture(fixtureDef);
    polygonShape.dispose();
    bat.setActive(true);
    return bat;
}
private void createBounds(){
    Body leftBound;
    Body rightBound;
    Body upperBound;
    BodyDef boundBodyDef = new BodyDef();
    boundBodyDef.type = BodyDef.BodyType.StaticBody;
    boundBodyDef.position.set(-WIDTH/2,0);
    leftBound = world.createBody(boundBodyDef);
    boundBodyDef.position.set(WIDTH/2,0);
    rightBound = world.createBody(boundBodyDef);
    boundBodyDef.position.set(0,HEIGHT/2);
    upperBound = world.createBody(boundBodyDef);
    PolygonShape polygonShape = new PolygonShape();
    polygonShape.setAsBox(2,HEIGHT);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.restitution = 1;
    fixtureDef.density = 1;
    fixtureDef.shape = polygonShape;
    leftBound.createFixture(fixtureDef);
    rightBound.createFixture(fixtureDef);
    polygonShape.setAsBox(WIDTH,2);
    fixtureDef.shape = polygonShape;
    upperBound.createFixture(fixtureDef);
    polygonShape.dispose();
}
private void createBall(float x,float y){
    Body ball;
    BodyDef ballBodyDef = new BodyDef();
    ballBodyDef.type = BodyDef.BodyType.DynamicBody;
    ballBodyDef.position.set(x,y);
    ballBodyDef.linearDamping = 0;
    ballBodyDef.angularDamping = 0;
    ball = world.createBody(ballBodyDef);
    CircleShape circleShape = new CircleShape();
    circleShape.setRadius(10f);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.restitution = 1;
    fixtureDef.density = 1f;
    fixtureDef.shape = circleShape;
    fixtureDef.friction = 0.5f;
    ball.createFixture(fixtureDef);
    circleShape.dispose();
    ball.setActive(true);
    ballList.add(ball);
}
Answer 1

Проблема была в неверном timestep, там была пропущена f после значения. Также я уменьшил масштаб тел, не знаю точно, повлияло ли это тоже.

READ ALSO
Создание файла MS Word при нажатии на кнопку в графическом интерфейсе

Создание файла MS Word при нажатии на кнопку в графическом интерфейсе

Пытаюсь получить строковую переменную из "TextField" и передать ее в создаваемый файл MS Word

125
Не могу получить данные из базы данных

Не могу получить данные из базы данных

Пробую делать мини приложение, что-то типа доски объявленийНи как не получается у меня сделать поиск по фильтру

124
Как поместить объекты enum в коллекцию?

Как поместить объекты enum в коллекцию?

Есть объекты enum, надо их поместить в коллекциюКак это сделать?

127
List<JPAEntity> to DTO — как собрать статистику ПО ДНЯМ?

List<JPAEntity> to DTO — как собрать статистику ПО ДНЯМ?

Нужно сделать статистикуЕсть две даты

111