您现在的位置是:首页 > 文章详情

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

日期:2017-05-01点击:205

本节书摘来自异步社区《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号声音的方法。

原文链接:https://yq.aliyun.com/articles/100505
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章