我正在开发一款安卓游戏,这个问题已经拖了一段时间,现在回来重视它了。在我的游戏中,有背景音乐、枪声、爆炸等声效,我需要能够同时播放它们。目前,当我在SoundPool类上调用play方法时,当前正在播放的声音会被打断,新的声音开始播放。下面是我的SoundManager类及其使用方式。如果有帮助,将不胜感激,因为这是我第一个需要这么多音效的游戏。谢谢!
public class SoundManager {
private SoundPool mSoundPool;
private HashMap<Integer, Integer> mSoundPoolMap;
private AudioManager mAudioManager;
private Context mContext;
public SoundManager(Context theContext) {
mContext = theContext;
mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
public void addSound(int index, int SoundID) {
mSoundPoolMap.put(index, mSoundPool.load(mContext, SoundID, 1));
}
public void playSound(int index) {
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
mSoundPool.play((Integer) mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
}
public void playLoopedSound(int index) {
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play((Integer) mSoundPoolMap.get(index), streamVolume, streamVolume, 1, -1, 1f);
}
}
这里是我如何使用这个类的示例。
SoundManager sm = new SoundManager(this);
sm.addSound(0, R.raw.explosion);
sm.playSound(0);
因此,使用这种方式,我在加载时将所有声音添加到SoundPool中,然后根据用户输入,我只想播放声音。这看起来正确吗?还是应该尝试另一种方式?