Итак, я пишу простую 2D-игру с javaFx. Я хочу использовать gif для анимации ходьбы, но через 2-3 секунды он перестает работать. Это происходит только тогда, когда я нажимаю кнопку D или A и восстанавливается, когда я нажимаю другую кнопку (это может быть случайная кнопка, не обязательно кнопка из W, S, A, D, которые я использую). Кто-нибудь знает, что вызывает это? Вот код изменения содержимого ImageView:
основной класс:
public class Main extends Application{
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
Parent root = loader.load();
Screen screen = Screen.getPrimary();
Rectangle2D bounds = screen.getVisualBounds();
primaryStage.setX(bounds.getMinX());
primaryStage.setY(bounds.getMinY());
primaryStage.setWidth(bounds.getWidth());
primaryStage.setHeight(bounds.getHeight());
primaryStage.setTitle("Dogs Gang");
Scene scene = new Scene(root, 300, 275);
Controller head = loader.getController();
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
head.getKeyControl().keyPressed(keyEvent);
}
});
scene.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
head.getKeyControl().keyReleased(keyEvent);
}
});
scene.getStylesheets().add(getClass().getResource("sample").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
часть класса Controller, которая влияет на список ключей:
public KeyControl getKeyControl(){ return this.keyControl;}
Класс KeyControl:
public class KeyControl {
private Player player;
public KeyControl(Player player){
this.player = player;
}
public void keyPressed(KeyEvent e){
player.setKeyP(e);
}
public void keyReleased(KeyEvent e) {
player.setKeyR(e);
}
}
часть класса Player, которая влияет на Keylistener:
public void setKeyP(KeyEvent e){
pm.setKeyP(e);
}
public void setKeyR(KeyEvent e){
pm.setKeyR(e);
}
* pm - класс PlayerMovement
часть класса playerMovement, который влияет на Keylistener:
public void setKeyP(KeyEvent e){
switch (e.getCode()) {
case W: jump(); break;
case S: pressedS = true; break;
case A: pressedA = true;
player.setImage(new Image("sample/Images/player-move-left.gif"));break;
case D: pressedD = true;
player.setImage(new Image("sample/Images/player-move-right.gif"));break;
}
}
public void setKeyR(KeyEvent e){
switch (e.getCode()) {
case S: pressedS = false; break;
case A: if(pressedA)player.setImage(new Image("sample/Images/player.png"));
pressedA = false; break;
case D: if(pressedD)player.setImage(new Image("sample/Images/player.png"));
pressedD = false; break;
}
}
* Класс Player - это класс, расширяющий ImageView.
«он перестал работать» означает, что он останавливается на одном кадре
ссылка на весь проект