Как сказал Оскар, вы не используете камеру или видовой экран, поэтому вы используете разрешение экрана. Если ширина телефона равна 800, а ширина стола равна 1200, и каждый кадр, который вы делаете actor.x += 20
, у актера есть 40 кадров на телефоне и 60 кадров на планшете, чтобы пересечь ширину отверстия.
Для начала этапа с Fitviewport:
private OrthographicCamera camera;
private FitViewport viewport;
private Stage stage;
@Override
public void show() {
camera = new OrthographicCamera();
viewport = new FitViewport(200, 200, camera);
stage = new Stage(viewport);
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height);
}
Теперь у вас есть сцена с областью просмотра 200 х 200 единиц.
Когда вы сейчас запустите приложение, актер будет иметь на обоих устройствах, телефоне и планшете 10 кадров слева направо.
Последняя проблема в том, что у вас может быть очень старый телефон, и он немного медленный. Вашему старому телефону требуется 0,02 с для кадра, а планшету - 0,016 с для кадра.
Таким образом, актер на планшете немного быстрее, чем на телефоне.
Вы думаете: «Мой актер может запустить 20 юнитов за 1 секунду». Итак, сначала вы делаете: actor.x += 20;
Но проблема в том, что теперь актер запускает 20 кадров в кадре, а не в секунду.
Чтобы решить проблему, нужно умножить 20 на время дельты между этим и последним кадром: actor.x += 20 * delta;
(delta
в методе act(float delta)
):
@Override
public void act(float delta) {
x += 20 * delta;
}
Теперь ваш актер всегда запускает 20 единиц в 1 секунду, и на каждом устройстве вы видите мир шириной 200 единиц. Таким образом, на каждом устройстве у актера есть 10 секунд слева направо.