且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Android 3D 游戏案例开发大全》——6.7节相关工具类

更新时间:2022-09-26 12:07:57

本节书摘来自异步社区《Android 3D 游戏案例开发大全》一书中的第6章,第6.7节相关工具类,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区“异步社区”公众号查看

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号声音的方法。