В настоящее время я создаю Java 2D-игру, в которой я получаю команды от пользователя, чтобы перемещать персонаж вверх, вниз, влево или вправо на определенное расстояние. В настоящее время я использую цикл for
через пользовательские входы и передаю строку классу Player, которая проверяет, соответствует ли строка ввода пользователю одно из направлений перемещения символа. Когда все это выполняется, кажется, что игрок телепортирован в конечное местоположение. Есть ли способ для персонажа перемещать определенное количество пикселей до тех пор, пока он не достигнет целевого местоположения, чтобы он выглядел так, как будто игрок, естественно, перемещается к месту.Игра персонажа перемещается слишком быстро
Это функция movePlayer, которая используется для прохождения через JTextFields
, которые содержат команды пользователя для перемещения плеера. strings
из каждого текстового поля передается в другую функцию: inputListener
.
public void movePlayer(){
for (int i = 0; i < userTextInput.size(); i++) {
inputListener(userTextInput.get(i).getText());
}
}
В inputListener
проверяет, является ли strings
, введенный пользователем совпадает с типом движения, и инициирует соответствующий метод для перемещения персонажа.
private void inputListener(String Input){
if(Input.equals("up")){
player.moveCharacterUp();
}else if(Input.equals("down")){
player.moveCharacterDown();
}else if(Input.equals("left")){
player.moveCharacterLeft();
}else if(Input.equals("right")){
player.moveCharacterRight();
}
}
Это где x
и y
позиция символа устанавливается в соответствии с методом запуска из inputListener
public void moveCharacterUp(){
y -= moveSpeed;
}
public void moveCharacterDown(){
y += moveSpeed;
}
public void moveCharacterLeft(){
x -= moveSpeed;
}
public void moveCharacterRight(){
x += moveSpeed;
}
Метод запуска для Thread
, который я использую.
public void run(){
init();
long start;
long elapsed;
long wait;
while(running){
start = System.nanoTime();
update();
draw();
drawToScreen();
elapsed = System.nanoTime() - start;
wait = targetTime - elapsed/1000000;
if(wait < 0) wait = 5;
try{
Thread.sleep(wait);
}catch(Exception e){
e.printStackTrace();
}
}
}
Облегченный подход может заключаться в использовании 'Thread.sleep (200);' или что-то подобное в вашем игровом цикле. –
Это не изменит расстояние или скорость перемещения персонажа, оно лишь создаст небольшую паузу в потоке, что я могу себе представить, было бы очень раздражающе? –