我正在Android上创建游戏,并且已经将这个问题搁置了一段时间,现在又回到了问题上。在我的游戏中,我有背景音乐,枪声,爆炸声等,而且我需要能够同时玩它们。现在,当我在SoundPool类上调用play时,当前正在播放的声音被打断,新的声音开始播放。下面是我的SoundManager类及其用法。任何帮助将不胜感激,因为这确实是我需要拥有如此多音效的第一款游戏。谢谢!

public class SoundManager {

private SoundPool mSoundPool;

private HashMap mSoundPoolMap;

private AudioManager mAudioManager;

private Context mContext;

public SoundManager(Context theContext) {

mContext = theContext;

mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);

mSoundPoolMap = new HashMap();

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中,然后根据用户输入我只想播放声音。这看起来正确吗?还是我应该尝试以其他方式去做?

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐