Сообщение от FireOwl
Когда двигаешь тело командой setLinearVelocity() - ты жестко задаешь вектор его движения. Естественно гравитация перестает влиять на него.
Двигай при помощи applyForce или applyImpulse.
|
В том то и дело, что не помогает, и ттак фризится.
Код
Vector2 lv;
Vector2 pos;
public void move(Vector2 dir) {
pos = body.getPosition();
if (dir.x < 0) {
sprite.setFlip(true, false);
} else if (dir.x > 0) {
sprite.setFlip(false, false);
}
lv = body.getLinearVelocity();
if (Math.abs(lv.x) < speed || dir.x != 0) {
body.applyLinearImpulse(new Vector2(dir.x * 100000f * speed, 0), pos, false);
} else if (dir.x == 0) {
// lv.x = 0;
// body.setLinearVelocity(lv);
}
}
public void jump() {
groundTest();
if (hasGround && lv.y <= 0) {
body.applyLinearImpulse(new Vector2(0, speed * 18000f), pos, true);
hasGround = false;
}
}
private void groundTest() {
//hasGround = false;
world.rayCast(new RayCastCallback() {
@Override
public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) {
if (fixture == collider_f || fixture == body_f) {
hasGround = false;
return -1;
}
hasGround = true;
Gdx.app.log("Callback length:", point.dst(pos) + "");
return 0;
}
}, pos, new Vector2(pos.x, pos.y - rect.height * 0.55f));
}