Собрал демку (на основе старой
записи из блога LibGDX):
http://pastebin.com/650qW2NG
Движение происходит как раз через импульсы, с контролем максимальной скорости:
Vector2 vel = player.getLinearVelocity();
Vector2 pos = player.getPosition();
// cap max velocity on x
if(Math.abs(vel.x) > MAX_VELOCITY) {
vel.x = Math.signum(vel.x) * MAX_VELOCITY;
player.setLinearVelocity(vel.x, vel.y);
}
// apply left impulse, but only if max velocity is not reached yet
if(Gdx.input.isKeyPressed(Keys.A) && vel.x > -MAX_VELOCITY) {
player.applyLinearImpulse(-2f, 0, pos.x, pos.y, true);
}
// apply right impulse, but only if max velocity is not reached yet
if(Gdx.input.isKeyPressed(Keys.D) && vel.x < MAX_VELOCITY) {
player.applyLinearImpulse(2f, 0, pos.x, pos.y, true);
}
Полная картина - на Пастебин.