Я использую базовый libgdx box2d для управления физическими операциями в игре. Все работает правильно, кроме вращений: даже когда я устанавливаю
anyobject.body.setAngularVelocity(someLargeConstant);
объект вращается очень медленно (и почти с той же скоростью), независимо от того, что такое «someLargeConstant». За исключением случаев, когда я использую маленькие числа для параметра, он может вращаться медленнее. Таким образом, я думаю, что у меня каким-то образом есть константа максимальной угловой скорости внутри моего объекта мира, которая должна быть установлена на какое-то небольшое значение.
(У меня также была аналогичная проблема с линейной скоростью раньше, и я решил ее, отрегулировав масштаб пикселей/метр. Так что маловероятно, что проблема связана с масштабированием.)
Как сделать так, чтобы объекты вращались быстрее?
Вот код, который я использую:
private static World world = new World(new Vector2(0, 0), true); //Create a world with no gravity
для создания объекта я вызываю другой класс
public Object(World world, short category, short mask, float x, float y, float radius, Sprite image,
float maxSpeed, float frictionStrength, float linearDamping, float angularDamping, boolean movable,
float elasticity, float mass){
this.world = world;
this.category = category;
this.mask = mask;
// We set our body type
this.bodyDef = new BodyDef();
if(movable==true){bodyDef.type = BodyType.DynamicBody;}else{bodyDef.type = BodyType.StaticBody;}
// Set body's starting position in the world
bodyDef.position.set(x, y);
bodyDef.linearDamping = linearDamping;
bodyDef.angularDamping = angularDamping;
// Create our body in the world using our body definition
this.body = world.createBody(bodyDef);
// Create a circle shape and set its radius
CircleShape circle = new CircleShape();
circle.setRadius(radius);
// Create a fixture definition to apply our shape to
fixtureDef = new FixtureDef();
fixtureDef.shape = circle;
fixtureDef.density = (float) (mass/(Math.PI*radius*radius));
fixtureDef.friction = frictionStrength;
fixtureDef.restitution = elasticity;
fixtureDef.filter.categoryBits = category;
fixtureDef.filter.maskBits = mask;
// Create our fixture and attach it to the body
this.fixture = body.createFixture(fixtureDef);
// BodyDef and FixtureDef don't need disposing, but shapes do.
circle.dispose();
... unrelated functions after that
}
и здесь я просто пытаюсь заставить его вращаться быстро:
tempBall.body.setAngularVelocity(20000);