处理后音乐无法再次播放
Music cannot play again after dispose
我正在尝试构建一个静态 AudioManager
,它可以仅引用一个实例来播放任何音乐。但是,同样的音乐在我从实例中销毁后无法再次播放。
AudioManager
在桌面上 运行 时有效,但在 android 设备上 运行 时失败。
来自静态的主函数AudioManager
class:
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()
时处理它。
我正在尝试构建一个静态 AudioManager
,它可以仅引用一个实例来播放任何音乐。但是,同样的音乐在我从实例中销毁后无法再次播放。
AudioManager
在桌面上 运行 时有效,但在 android 设备上 运行 时失败。
来自静态的主函数AudioManager
class:
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()
时处理它。