Я создал класс Sound
для своей игры, который содержит MediaPlayer, который зацикливается (в сценарии, в котором возникает проблема).Если для объекта, содержащего объект Sound, задано значение NULL (чтобы удалить его), MediaPlayer продолжает воспроизведение до тех пор, пока не достигнет конца носителя, хотя он должен остановиться, поскольку для него должно быть установлено значение NULL.Или это не так?
Я нашел следующие сообщения в сети, но ни у одного из них не было такой же проблемы, как у меня: Link1 , Link2
Это класс Sound
:
public classs Sound {
MediaPlayer mediaPlayer;
public Sound(String path){
Media media = new Media(getClass().getResource("/audio/" + path).toString());
mediaPlayer = new MediaPlayer(media);
}
public void loop(){
//only called once after initialized
mediaPlayer.setAutoPlay(true);
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
mediaPlayer.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
mediaPlayer.seek(Duration.ZERO);
mediaPlayer.play();
}
});
mediaPlayer.play();
}
}
Это класс, содержащий звук:
public class Level {
private Sound soundTrack = new Sound("level_music.wav");
public Level() {
soundTrack.loop();
}
Вот как для объекта, содержащего звук, устанавливается значение NULL:
public class Main{
private Level level = new Level();
//...
public Main(){
new Timer(15, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(playerLeavesTheLevel()){
level = null;
//...
}
}
}
}
Единственная причина, по которой это не работает, заключается в том, что mediaPlayer не имеет нулевого значения после удаления объекта верхнего уровня.