Как заставить MediaPlayer приостановить и дождаться другого MediaPlayer? - PullRequest
0 голосов
/ 08 января 2020

Я заканчиваю свою игру на JavaFX, в которой одной из функций является фоновая музыка c, а также звуковые эффекты, добавленные к различным действиям. В какой-то момент игры, если вы выиграете, будет воспроизводиться специальный звуковой эффект.

Но вот в чем проблема:

Когда победный звуковой эффект закончится, я бы как для фоновой музыки c, чтобы приостановить и воспроизвести снова после завершения этого звукового эффекта. Я уже пытался манипулировать потоками, но каждый раз, когда я это делаю, выскакивает исключение.

Вот код, который может вас заинтересовать:

// That is the method in which upon winning (first "else" segment) you hear the sound effect
public void checkAction() {
    if (checkNumberOfGuesses < OptionsController.numberOfAllowedTries) {
        int guess = Integer.parseInt(guessNumberInputField.getText());
        if (guess < theNumber) {
            resultLabel.setText("Too low");
            wrongGuessSoundEffect();
        } else if (guess > theNumber) {
            resultLabel.setText("Too high");
            wrongGuessSoundEffect();
        } else {
            resultLabel.setText("Correct!\nYou win!");
            correctGuessSoundEffect();             // <- invoking the method that runs sound effect
            playAgainPane.setVisible(true);
            checkNumberOfGuesses = 0;
        }
    } else {
        resultLabel.setText("You loose...");
        gameOverSoundEffect();
        playAgainPane.setVisible(true);
        checkNumberOfGuesses = 0;
    }
    checkNumberOfGuesses++;
}

public void correctGuessSoundEffect() {
    String correctGuessFilePath = "C:/Users/Stanisław/IdeaProjects/GuessingApp_GUI/src/com/javafx/sounds/correctGuess2.mp3";
    Media correctGuessSound = new Media(new File(correctGuessFilePath).toURI().toString());
    correctGuessPlayer = new MediaPlayer(correctGuessSound);
    correctGuessPlayer.play();
}

// THIS method is located in different class than the other two
public static void backgroundMusic(String backgroundMusicPath) throws InterruptedException {
    Media backgroundMusic = new Media(Paths.get(backgroundMusicPath).toUri().toString());
    backgroundMusicPlayer = new MediaPlayer(backgroundMusic);
    backgroundMusicPlayer.setCycleCount(MediaPlayer.INDEFINITE);
    backgroundMusicPlayer.play();
}

Другое возможное осложнение заключается в том, что backgroundMusi c () метод запускается из основного класса с помощью метода start (Stage primaryStage) . Я должен держать его там, чтобы музыка c играла в каждом окне (которых у меня в игре всего 5).

Я только начал программировать, поэтому решение может быть тривиальным. Я буду благодарен за всю помощь, которую я могу получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...