поэтому я пытаюсь создать многопользовательскую игру Tron, которая немного напоминает змею.В любом случае, несколько человек должны иметь возможность играть в эту игру, используя одну клавиатуру, но различные комбинации клавиш, чтобы управлять своим персонажем на экране.В настоящее время один игрок будет использовать клавиши WASD, а другой должен использовать клавиши со стрелками.
Моя проблема в том, что я создал сцену с помощью Javafx Scene Builder с использованием FXML.Только после создания игры я заметил, что строитель сцены, по-видимому, поддерживает только одного ключевого слушателя, поэтому на данный момент только один игрок может контролировать свою игровую фигуру.Есть ли способ это исправить?Помогите, пожалуйста, чтобы один игрок мог использовать клавиши WASD, а другой - для перемещения по клавишам со стрелками.Мой вопрос отличается от существующих решений, поскольку змеи должны принадлежать различным игрокам.Недостаточно просто проверить, была ли нажата клавиша ввода или две клавиши одновременно, но необходимо проверить, нажал ли правильный игрок ввод, даже если другой игрок тоже нажал их ввод в это время.Надеюсь, это немного прояснит ситуацию.
Key Listener
import java.util.ArrayList;
import javafx.scene.Scene;
public class Human extends Player implements Runnable{
int keyboardControlsLayout;
Scene scene;
public Human(int stepSize, String colour, int playerNum, Scene scene,
int keyboardControlsLayout) {
super(stepSize, colour, playerNum);
// keyboardControlsLayout(0) = WASD
// keyboardControlsLayout(1) = ARROWS
this.keyboardControlsLayout = keyboardControlsLayout;
this.scene = scene;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(this.getSnake().getAlive()) {
if (keyboardControlsLayout == 1) {
// use WASD
System.out.println("wasd");
scene.setOnKeyPressed(event -> {
switch (event.getCode()) {
case W:
snake.setDirection(0);
break;
case S:
snake.setDirection(1);
break;
case A:
snake.setDirection(3);
break;
case D:
snake.setDirection(2);
break;
default:
break;
}
//System.out.println(event.getCode().toString());
});
} else if (keyboardControlsLayout == 0) {
System.out.println("arrows");
// use arrow keys
scene.setOnKeyPressed(event -> {
switch (event.getCode()) {
case UP:
snake.setDirection(0);
break;
case DOWN:
snake.setDirection(1);
break;
case LEFT:
snake.setDirection(3);
break;
case RIGHT:
snake.setDirection(2);
break;
default:
break;
}
});
}
}
}
}
Где я создаю сцену:
public void newGame() {
System.out.println("<----- NEW GAME ----->");
game = new Game(10, scene, numHumans);
displayController.setUpDisplay(game);
timer = new Timeline((new KeyFrame(
Duration.millis(80),
event -> {
try {
timerTick();
} catch (Exception e) {
// TODO Auto-generated catch
block
e.printStackTrace();
}
})));
timer.setCycleCount(Animation.INDEFINITE);
start();
}
private void start() {
// starts game and logic
}
private void loadDisplayFXMLLoader() {
FXMLLoader displayFXMLLoader = new
FXMLLoader(getClass().getResource("DisplayView.fxml"));
try {
scene = new Scene(displayFXMLLoader.load(), 500, 525);
} catch (IOException e) {
Main.outputError(e);
}
displayController = displayFXMLLoader.getController();
}
private void loadScene() {
this.setScene(scene);
this.show();
//error Handling and closing
}
Любая помощь будет оценена!
Спасибо