Проверьте, нажата ли какая-либо кнопка (или коснулась экрана), если она установлена, установите правильную целевую плиту (плитку, в которой игрок пойдет) в поле и начните движение туда, это движение закончится только тогда, когда игрок находится в следующей плитке. Когда это произойдет, снова проверьте вход, чтобы продолжить движение (т. Е. Повторить).
Предположим, ваша ширина/высота плитки равна 1, и вы хотите переместить 1 плиту в секунду. Ваш пользователь нажал клавишу со стрелкой вправо. Затем вы просто устанавливаете targettile на плитку справа от игрока.
if(targettile!=null){
yourobject.position.x += 1*delta;
if(yourobject.position.x>=targettile.position.x){
yourobject.position.x = targettile.position.x;
targettile = null;
}
}
Этот код упрощен только для правостороннего перемещения, вам также нужно сделать его для других направлений.
Не забудьте повторно опросить вход, если игрок не двигается.
Edit:
InputPolling для ключей:
if (Gdx.input.isKeyPressed(Keys.DPAD_RIGHT)){
InputPolling для Touchs (кулачок камера, и TouchPoint является Vector3 для хранения unprojected касания координаты и moverightBounds а (libgdx) Прямоугольник):
if (Gdx.input.isTouched()){
cam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));
//check if the touch is on the moveright area, for example:
if(moveRightBounds.contains(touchPoint.x, touchPoint.y)){
// if its not moving already, set the right targettile here
}
}
И noone уже сказал, что это, вы получите в виде дельта параметр в визуализации метод, или вы можете получить его в другом месте с помощью:
Gdx.graphics.getDeltatime();
Ссылки:
Спасибо за помощь. Не могли бы вы объяснить немного больше, где вызывать этот код и как делать входной опрос? Кроме того, я не уверен, как вычислить 'delta' в соответствии с изменяющейся частотой кадров. –
@JensPiegsa Вы получаете дельта от LibGDX как параметр в методах render(). В противном случае вы можете получить его через Gdx.graphics.getDeltaTime(). – noone
Отредактированный мой ответ: вы вызываете это в методе рендеринга (каждый кадр) – Lestat