JavaFx Gif в ImageView останавливается - PullRequest
0 голосов
/ 28 января 2020

Итак, я пишу простую 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.

«он перестал работать» означает, что он останавливается на одном кадре

ссылка на весь проект

...