Я использую libgdx и box2d, и я хочу, чтобы тело моего игрока прыгало. Ничего не происходит, когда я пытаюсь использовать некоторые методы, даже если это просто для перемещения.Корпус Box2d не отвечает на входы
//gravity Vector2
Vector2 Gravity = new Vector2(0,-9.8);
//Box2d World
World world = New World(gravity);
//then I created my player body
public void createPlayer(){
BodyDef def = new BodyDef();
def.type = BodyDef.BodyType.DynamicBody;
def.fixedRotation = true;
def.position.set(80, 200);
player = world.createBody(def);
PolygonShape shape = new PolygonShape();
shape.setAsBox(20, 20);
player.createFixture(shape, 1f);
shape.dispose();
}
//this is the jump method
public void jump(){
if(Gdx.input.justTouched() == true) {
player.applyForceToCenter(0, 900, false);
System.out.println("touched");//to make sure the touch is working`
}
}
Ничто не происходит, и тело игрока просто падает, пока он не сталкивается со статическим телом, каждый раз, когда я прикасаюсь к экрану он только печатает на «прикоснулся» строку.
UPDATE
Не уверен, если это является причиной того, почему он не работает, у меня есть два класса, один для рендеринга и один для обновления. В классе обновления я устанавливаю world.step(), а не непосредственно в класс, где находится мое тело.
//class for updating
public void update(float deltaTime){
physics.world.step(1/60f, 6, 2);
physics.jump(); //calling jump method from Physics class
}
То же самое для класса рендеринга, Box2dDebugRenderer
отделяется где мои тела
UPDATE
Я исправил проблему, мой физический класс, который подключен к Update и Рендер класс имел ссылка на метод создания основного класса, я не понимаю, потому что это то, что я сделал для конструктора других классов.
public void create(){
physics = new Physics(); //object for the Physics constructor.
}
Я попытался установить тело 5х5 метра, то усилие до 900, но то же самое случается, также вы можете установить вес тела? –
вы можете поместить плотность тела в fixtureDef: попробуйте что-то вроде: fixtureDef.density = 0.1f – Netero
см. Обновление моего ответа, которое вы вызываете Gdx.input.justTouched(), который вызывается только один раз – Netero