Проверьте, нажата ли конкретная кнопка (или коснулся ли экран), если да, установите правильную целевую плитку (плитку, куда пойдет игрок) в поле и начните движение туда, это Движение закончится только тогда, когда игрок находится в поле. следующая плитка. Когда это произойдет, снова проверьте ввод, чтобы продолжить движение (т. е. повторить).
Предположим, ширина/высота вашего тайла равна 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;
}
}
Этот код упрощен только для правильного движения, вам нужно сделать его и для других направлений.
Не забудьте снова опросить ввод, если игрок не движется.
Изменить:
InputPolling для ключей:
if (Gdx.input.isKeyPressed(Keys.DPAD_RIGHT)){
InputPolling для касаний (cam — это ваша камера, а touchPoint — это Vector3 для хранения непроецированных координат касания и moverightBounds (libgdx) Rectangle):
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
}
}
И никто уже не говорил об этом, вы получаете дельту как параметр в методе render или вы можете получить его в любом другом месте, используя:
Gdx.graphics.getDeltatime();
Использованная литература:
person
Lestat
schedule
07.01.2014