6.7 相关工具类
Android 3D 游戏案例开发大全
为了实现程序中的功能,需要很多工具辅助方法,在开发时将相关的方法组织到一起就构成了一个个的工具类。工具类自己并不能实现什么具体的效果,但它是程序后台的支撑。
6.7.1 箱子排序类CompareDis
本小节为读者介绍的是箱子排序类,该类通过比较箱子与摄像机之间距离来确定箱子的绘制顺序,其代码如下。
1 package com.bn.txz.manager; //声明包
2 public class CompareDis implements Comparable<CompareDis>{
3 public float dis;
4 public int row;
5 public int col;
6 public CompareDis(float dis,int row,int col){ //创建CompareDis方法构造器
7 this.dis=dis;
8 this.row=row;
9 this.col=col;
10 }
11 @Override
12 public int compareTo(CompareDis another) { //需要从大到小排列,所以返回值相反
13 if(dis<another.dis) //-1表示小于
14 return 1;
15 if(dis>another.dis) //1表示大于
16 return -1;
17 return 0;
18 }}
第3-5行是声明该类中的成员变量。第6-10行是该类的构造器,其在其他类创建该类对象时被调用。第11-18行是重写ComparaTo方法,其实现的功能是根据比较的大小返回代表大于、小于或等于的代表数据。
6.7.2 记录关卡工具类SharedPreferencesUtil
上一小节为读者介绍了箱子排序类CompareDis,本小节为读者介绍的是记录关卡工具类,其代码如下。
1 package com.bn.txz.manager; //声明包
2 ……//此处省略了本类中导入类的代码,读者可以自行查阅随书光盘中的源代码
3 public class SharedPreferencesUtil {
4 private SharedPreferences sp; //声明成员变量
5 public SharedPreferencesUtil(TXZActivity activity) { //构造器
6 sp=activity.getSharedPreferences("playerPrefers", Context.MODE_PRIVATE);
7 }
8 public int getPassNum() { //获取通过关卡方法
9 return sp.getInt("passNum", 1);
10 }
11 public void putPassNum(int value){ //存储通过关卡方法
12 Editor editor=sp.edit(); //创建对象
13 editor.putInt("passNum", value);
14 editor.commit(); //提交数据
15 }}
第4行是声明该类中的成员变量。第5-7行是该类的构造方法。第8-10行是获取通过关卡方法。第11-15行是存储通过关卡方法。
6.7.3 声音加载类SoundUtil
本小节为读者介绍的是声音加载工具类,本类提供了将声音加载进内存的初始化声音的方法initSounds和播放声音的方法playSounds,其代码如下。
1 package com.bn.txz.manager; //声明包
2 ……//此处省略了本类中导入类的代码,读者可以自行查阅随书光盘中的源代码
3 public class SoundUtil {
4 public static final int XUANZHONG=1; //音效编号
5 public static SoundPool soundPool; //声音缓冲池
6 public static HashMap<Integer, Integer> soundPoolMap; //存放声音id的Map
7 public static void initSounds(Context context) { //声音缓冲池的初始化
8 soundPool = new SoundPool ( //创建声音缓冲池
9 2, //同时能最多播放的个数
10 AudioManager.STREAM_MUSIC, //音频的类型
11 100 //声音的播放质量,目前无效
12 );
13 soundPoolMap = new HashMap<Integer, Integer>(); //创建声音资源Map
14 //将加载的声音资源id放进此Map
15 soundPoolMap.put(XUANZHONG, soundPool.load(context, R.raw.zhuangsui, 1));
16 }
17 public static void playSounds(int key, int loop,Context context){ //播放声音的方法
18 AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_ SERVICE);
19 float streamVolumeCurrent = mgr. //当前音量
20 getStreamVolume(AudioManager.STREAM_MUSIC);
21 float streamVolumeMax = mgr. //最大音量
22 getStreamMaxVolume(AudioManager.STREAM_MUSIC);
23 float volume = streamVolumeCurrent / streamVolumeMax;
24 soundPool.play(
25 soundPoolMap.get(key), //声音id
26 volume, //左声道
27 volume, //右声道
28 1, //优先级
29 loop, //是否循环
30 0.5f //rate
31 );
32 }}
第4-6行分别声明了音效编号、声音缓冲池和存放声音id的Map。第7-16行为声音缓冲池的初始化方法,在该方法中创建了声音缓冲池和声音资源Map,同时将加载的声音资源存到Map。第17-32行是播放指定id号声音的方法。
时间: 2024-11-05 17:17:39