Android游戏开发中使用SoundPool来实现音效的播放

     SoundPool和MediaPlay 

    SoundPool和MediaPlay都是用来播放音乐的类,这两个类的主要的区别是:

 SoundPool一般是用来播放比较短的实时性要求比较强的音乐,所以SoundPool一般是用来播放游戏中的音效:点击某个按钮时的声音、子弹发出去时候的声音、碰撞时发出的声音、点击菜单中的菜单项时发出的声音。

MediaPaly一般是用来播放的背景音乐,适用于实时性要求不高的,播放时间较长的音乐。

1.创建一个能使用SoundPool来实现播放音效的类SoundPlay:

import java.util.HashMap;

import com.up.R;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

public class SoundPlay {

	SoundPool soundPool;//创建一个SoundPool的类
	HashMap<Integer,Integer> soundPoolMap;//HashMap类将音乐对应到键值
	int streamVolume;
	
	public SoundPlay(Context context){
		initSoundPool(context);
	}//context为调用该SoundPlay的类,调用SoundPlay类的这个类继承自View
	
	public void initSoundPool(Context context){
		soundPool = new SoundPool(100,AudioManager.STREAM_MUSIC,1);
		soundPoolMap=new HashMap<Integer,Integer>();
		AudioManager audioManager=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
		streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
		addSoundToHashMap(context);
	}//使用context获得当前手机的声音
	
	public void addSoundToHashMap(Context context){
		soundPoolMap.put(R.raw.attack02, soundPool.load(context, R.raw.attack02, 1));
		soundPoolMap.put(R.raw.attack14, soundPool.load(context, R.raw.attack14, 1));
		soundPoolMap.put(R.raw.cricket, soundPool.load(context,R.raw.cricket,1));
		
	}//将你的音乐文件添加到HashMap中,并且使SoundPool加载该音乐文件
	public void playSound(int sound,int num){
		soundPool.play(soundPoolMap.get(sound), streamVolume, streamVolume, 1, num, 1);
	}//使用HashMap中的键值来播放音乐
}


2.创建一个单线程用来保存音效按钮的开关,SettingManager和Setting:

public class SettingManager {

    private static SettingManager mSettingManager;//静态的成员变量
    private Context mContext;
    private SharedPreferences mSharedPreferences;//轻量级数据库,用来存储音乐和音效按钮是否为开启状态
    private SharedPreferences.Editor mEditor;//由于SharedPreferences智能读取XML文件中的数据,不能修改XML文件中的数据,所以得使用Editor来对数据库进行修改
    
    public Setting setting = null;
    
    public static final String SETTING = "setting";

public static final String KEY_IS_MUSIC_ON = "is_music_on";public static final String KEY_IS_SOUND_ON = "is_sound_on"; private SettingManager() { mContext = Application.getContext();//使用Application来获得Context mSharedPreferences = mContext.getSharedPreferences(SETTING, 0); mEditor = mSharedPreferences.edit(); if(setting == null) { setting = new Setting(); setting.is_music_on = mSharedPreferences.getBoolean(KEY_IS_MUSIC_ON, false); setting.is_sound_on = mSharedPreferences.getBoolean(KEY_IS_SOUND_ON, false); } } //使用synchronized来定义该方法为单线程的,当mSettingManager没有被初始化的时候就将定义该static变量,使用的时候为SettingManager.getInstance().getSettingBooleanInfo(SettingManger.KEY_IS_MUSIC_ON); public static synchronized SettingManager getInstance() { if (mSettingManager == null) { mSettingManager = new SettingManager(); } return mSettingManager; } //设置背景音乐和音效按钮的状态,若为关闭状态则SharedPreferences中的"is_music_on"对应的值为false,否则为true public void setSettingBooleanInfo(String tag, boolean flag) { if (null == mContext || mEditor == null) { return ; } mEditor.putBoolean(tag, flag).commit(); if(tag.equals(KEY_IS_MUSIC_ON)) { setting.is_music_on = flag; } else if(tag.equals(KEY_IS_SOUND_ON)) { setting.is_sound_on = flag; } }//从ShredPreferences数据库中得到音乐和音效按钮的状态信息 public boolean getSettingBooleanInfo(String tag) { if(null == mSharedPreferences) { return false; } return mSharedPreferences.getBoolean(tag, false); }}public class Setting { /** * 背景音乐 */ public boolean is_music_on; /** * 音效 */ public boolean is_sound_on;}


3.在Activity中使用下面的语句来实现音效的播放

if(SettingManager.getInstance().getSettingBooleanInfo(SettingManager.KEY_IS_SOUND_ON))    soundPlay.playSound(R.raw.cricket, 1);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值