#java #box2d #jbox2d
#java #box2d #jbox2d
Вопрос:
Я пытаюсь создать игру, в которой вы можете перемещать мяч, и в ней будет трение, но если я добавлю трение, то мяч перестанет двигаться горизонтально, когда он ударится о землю после того, как он высоко подпрыгнет (вероятно, потому, что нормальная сила высока, когда мяч падает с высокой скоростью, поэтому трение уменьшается).сильнее). когда я убираю трение (устанавливаю его на 0), это нормально, но я хочу трения.
это код для создания тел для мяча и пола:
BodyDef ballDef = new BodyDef();
ballDef.type = BodyType.DYNAMIC;
CircleShape golfShape = new CircleShape();
golfShape.setRadius(blockSize / 6.0f / jBox2DScale);
ballBody = world.createBody(ballDef);
ballBody.setFixedRotation(true);
FixtureDef ballFixture = new FixtureDef();
ballFixture.density = 1f;
//ballFixture.restitution = 0.9f;
ballFixture.friction = 0.1f;
ballFixture.shape = golfShape;
ballBody.createFixture(ballFixture);
ballBody.setTransform(new Vec2(width / 2.0f / jBox2DScale, height / 2.0f / jBox2DScale), 0.0f);
BodyDef blockDef = new BodyDef();
blockDef.type = BodyType.STATIC;
Body body = world.createBody(blockDef);
FixtureDef blockFixture = new FixtureDef();
blockFixture.density = 100;
blockFixture.restitution = 0.75f;
blockFixture.friction = 0.15f;
EdgeShape sideShape = new EdgeShape();
sideShape.set(new Vec2(0.0f, 0.0f), new Vec2(width, 0.0f));
sideShape.m_vertex0.set(-width, 0.0f);
sideShape.m_vertex3.set(width * 2, 0.0f);
sideShape.m_hasVertex0 = true;
sideShape.m_hasVertex3 = true;
sideShape.setRadius(0.01f);
blockFixture.shape = sideShape;
body.createFixture(blockFixture);
sideShape = new EdgeShape();
sideShape.set(new Vec2(width, 0.0f), new Vec2(width, height));
sideShape.m_vertex0.set(width, -height);
sideShape.m_vertex3.set(width, height * 2);
sideShape.m_hasVertex0 = true;
sideShape.m_hasVertex3 = true;
sideShape.setRadius(0.01f);
blockFixture.shape = sideShape;
body.createFixture(blockFixture);
sideShape = new EdgeShape();
sideShape.set(new Vec2(width, height), new Vec2(0, height));
sideShape.m_vertex0.set(width * 2, height);
sideShape.m_vertex3.set(-width, height);
sideShape.m_hasVertex0 = true;
sideShape.m_hasVertex3 = true;
sideShape.setRadius(0.01f);
blockFixture.shape = sideShape;
body.createFixture(blockFixture);
sideShape = new EdgeShape();
sideShape.set(new Vec2(0.0f, height), new Vec2(0.0f, 0.0f));
sideShape.m_vertex0.set(0.0f, height * 2);
sideShape.m_vertex3.set(0.0f, -height);
sideShape.m_hasVertex0 = true;
sideShape.m_hasVertex3 = true;
sideShape.setRadius(0.01f);
blockFixture.shape = sideShape;
body.createFixture(blockFixture);
body.setTransform(new Vec2(x, y), 0.0f);
Изображение того, что происходит:
У кого-нибудь есть идея, как ее решить?
(Редактировать) Я удалил фиксированное вращение шара и добавил угловое демпфирование, которое, я думаю, является лучшим простым способом исправить это.
Ответ №1:
вы можете исправить это поведение ballBody.setFixedRotation(false);
, полностью удалив оператор.
Комментарии:
1. Но если я это сделаю, то трение не будет работать на мяче. Это то же самое, что отключить трение. Может быть, есть другая форма, которую я мог бы использовать для мяча?