处理后音乐无法再次播放

Music cannot play again after dispose

我正在尝试构建一个静态 AudioManager,它可以仅引用一个实例来播放任何音乐。但是,同样的音乐在我从实例中销毁后无法再次播放。

AudioManager 在桌面上 运行 时有效,但在 android 设备上 运行 时失败。

来自静态的主函数AudioManagerclass:

Music music = null;
public static Music playMusic(String musicName){
    if (music!=null){
        music.stop();
        music.dispose();
    }

    music = assetManager.get("music/"+musicName,Music.class);
    music.setLooping(true);
    music.play();
    currentMusicName = musicName;
    MyDebugger.d("new music !");
    return music;
}

从 music_A 到 music_B 的更改有效,但重新使用 music_A 无法正常播放任何音乐。 (在 android 设备中)

请帮忙。

您正在处理您的音乐,然后在您使用 assetManager.get() 时尝试重新使用相同的音乐实例。

当您使用 AssetManager 加载资产时,不应释放它。你应该卸载它。这也意味着您不能在卸载后重新使用它。您需要加载一个新副本。

Music music = null;
public static Music playMusic(String musicName)
{

    if (music!=null){
        music.stop();
        assetManager.unload(music);
    }

    assetManager.load("music/"+musicName,Music.class);
    assetManager.finishLoading();
    music = assetManager.get("music/"+musicName,Music.class);
    music.setLooping(true);
    music.play();
    currentMusicName = musicName;
    return music;
}

但是由于您一次只加载一个音乐实例(根据您对 static 方法的使用判断),完全不使用资产管理器可能更容易。

请谨慎使用 static 处理任何涉及一次性物品的内容。不要忘记在调用游戏的 dispose() 时处理它。