我目前正在创建一个 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();
}
}
}