我正在创建一个 Java 游戏,用户可以在其中输入命令up
、left
、right
或down
将角色在该位置移动一定数量的像素。在Player
课堂上,我在用户按下开始按钮后收到来自用户ArrayList
的命令。JTextField
然后,我使用for
循环遍历用户的所有输入,并在多维数组中创建x
和定位玩家需要移动的距离和距离。最后我有一个在主游戏循环中调用的函数。在这个函数中,我循环遍历目标的多维数组并有一个y
x
y
updatePosition()
if
检查是否达到目标的语句。然而,当执行该方法并且用户已经输入了例如up
和的命令时right
,则角色沿对角线向上移动。我想要一种将角色沿用户指定的方向移动的方法,一个接一个地执行它们。
这是代码:
moveSpeed = 1;
private double moveAmt = 20;
private Double[][] targetCoordinates = null;
private ArrayList<JTextField> userInputTextFields = new ArrayList<JTextField>();
使用下面的方法,我获取ArrayList
用户JTextFields
输入命令并将其存储在本地的ArrayList
. 我还设置了用户输入命令Array
的数量的大小JTextFields
。这个数组将用于存储字符的x
和y
目标。然后我最后调用moveChar();
将设置目标的方法x
和y
.
public void getInputText(ArrayList<JTextField> textFields){
this.userInputTextFields = textFields;
targetCoordinates = new Double[userInputTextFields.size()][2];
moveChar();
}
此方法将检查用户是否输入了命令并在数组中设置x
和y
目标。targetCoordinates
private void moveChar(){
for (int i = 0; i < userInputTextFields.size(); i++) {
if(userInputTextFields.get(i).getText().equals("up")){
targetCoordinates[i][0] = x;
targetCoordinates[i][1] = y - moveAmt;
} else if(userInputTextFields.get(i).getText().equals("down")){
targetCoordinates[i][0] = x;
targetCoordinates[i][1] = y + moveAmt;
} else if(userInputTextFields.get(i).getText().equals("left")){
targetCoordinates[i][0] = x - moveAmt;
targetCoordinates[i][1] = y;
} else if(userInputTextFields.get(i).getText().equals("right")){
targetCoordinates[i][0] = x + moveAmt;
targetCoordinates[i][1] = y;
}
}
}
最后,这是在主游戏循环中调用的方法。它遍历targetCoordinates
数组并检查是否达到了目标。如果不是,则相应地增加或减少角色x
和y
位置。
公共无效更新位置(){
if(targetCoordinates != null){
for (int i = 0; i < targetCoordinates.length; i++) {
if(y >= targetCoordinates[i][1]) {
moveCharacter(x, y - moveSpeed);
} else if(y < targetCoordinates[i][1]) {
moveCharacter(x, y + moveSpeed);
} else if(x > targetCoordinates[i][0]) {
moveCharacter(x - moveSpeed, y);
} else if(x <= targetCoordinates[i][0]) {
moveCharacter(x + moveSpeed, y);
}
}
}
}