JavaFX媒体卷绑定

JavaFX媒体卷绑定,javafx,properties,binding,media,volume,Javafx,Properties,Binding,Media,Volume,我正在用JavaFX开发小游戏。 我有一个实用类来管理音乐: private static Map<SongEnum, Media> songs = new EnumMap<>(SongEnum.class); private static MediaPlayer currentSong; public static void playSong(SongEnum song) { if(songs == null && currentSong !=

我正在用JavaFX开发小游戏。 我有一个实用类来管理音乐:

private static Map<SongEnum, Media> songs = new EnumMap<>(SongEnum.class);
private static MediaPlayer currentSong;
public static void playSong(SongEnum song) {
    if(songs == null && currentSong != null) {
        currentSong.stop();
        currentSong = null;
    }
    Media media = songs.get(song);
    if(media == null) {
        String path = ApplicationUtils.class.getResource(song.getPath()).toExternalForm();
        media = new Media(path);
        songs.put(song, media);
    }
    if(currentSong != null) {
        if(currentSong.getMedia() == media)
            return;
        currentSong.stop();
    }
    currentSong = new MediaPlayer(media);
    currentSong.setCycleCount(MediaPlayer.INDEFINITE);
    currentSong.play();
}
private static Map songs=new EnumMap(SongEnum.class);
私有静态媒体播放器;
公共静态无效播放歌曲(SongEnum歌曲){
如果(歌曲==null&¤tSong!=null){
currentSong.stop();
currentSong=null;
}
媒体=歌曲。获取(歌曲);
如果(媒体==null){
String path=ApplicationUtils.class.getResource(song.getPath()).toExternalForm();
媒体=新媒体(路径);
歌曲.播放(歌曲,媒体);
}
如果(currentSong!=null){
如果(currentSong.getMedia()==媒体)
返回;
currentSong.stop();
}
currentSong=新媒体播放器(媒体);
currentSong.setCycleCount(MediaPlayer.unfinite);
当前歌曲播放();
}
我想能够播放许多不同的歌曲-以上方法正确吗?
我也不知道在这种情况下如何实现卷管理系统。我的第一个想法是将一些slider属性(位于另一个类中)与MediaPlayer属性绑定,但在这种情况下,每次歌曲更改时,它都会更改。那么,实现它的最佳方法是什么呢?

在我们目前正在开发的游戏中,我们只使用了MediaPlayer的音量属性。我们把
0.3
放在背景主题上,把
0.8
1
放在效果上,因为它们应该高于背景主题。使用
currentSong.setVolume(“0到1”)测试它,看看它是如何工作的。至于使用滑块,为什么不使用
setOnEndOfMedia
循环播放歌曲呢。这样,音量就不会改变。当然,这只适用于只循环播放同一首歌曲的情况

currentSong.setOnEndOfMedia(() -> {
        currentSong.seek(Duration.ZERO);
        currentSong.play();
    });
如果没有,我会添加make
currentSong static
,然后像访问
“YourMediaClass.currentSong.setVolume”(“slider.getSliderValue或您使用的任何东西”)
一样访问它。这可能就是您正在寻找的