《Android 3D 游戏案例开发大全》——6.4节主控制类——TXZActivity类的开发

6.4 主控制类——TXZActivity类的开发
Android 3D 游戏案例开发大全
Android程序中,Activity是最重要的类之一。在本游戏中,TXZActivity继承自Activity类,为本游戏的主控制类,本节将具体介绍TXZActivity的开发,其具体步骤如下。

(1)主控制类代码非常多,首先搭建主控制类的框架,以帮助读者理解,主控制类框架代码如下。

1 package com.bn.txz;        //声明包
2 ……//此处省略了本类中导入类的代码,读者可以自行查阅随书光盘中的源代码
3 public class TXZActivity extends Activity {
4  TXZGameSurfaceView gv;      //游戏View引用
5  public SharedPreferencesUtil sharedUtil;  //声明SharedPreferencesUtil引用
6  AudioManager audio;       //游戏中控制音量工具对象
7  public MediaPlayer beijingyinyue;     //播放器
8  public  SharedPreferences sp;     //声明SharedPreferences引用
9  public boolean yinXiao=true;     //是否播放游戏音效标志位
10     @Override
11     public void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         requestWindowFeature(Window.FEATURE_NO_TITLE);
14   //设置为全屏显示
15   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,
16                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
17   //设置为横屏模式
18   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
19   DisplayMetrics dm=new DisplayMetrics();
20         getWindowManager().getDefaultDisplay().getMetrics(dm);
21         Constant.screenWidth=dm.widthPixels; //获取屏幕横向分辨率
22         Constant.screenHeight=dm.heightPixels;
23         Constant.ScaleSR();     //调用Constant类中计算缩放比例的方法
24         Constant.ratio=screenWidthStandard/screenHeightStandard;   //宽、高、比
25         sp= this.getSharedPreferences("sysz", Context.MODE_PRIVATE);                 //SharedPreferences对象
26         yinXiao=sp.getBoolean("youxiyinxiao", true); //获得boolean值yinXiao
27   //初始化SharedPreferencesUtil对象
28         sharedUtil=new SharedPreferencesUtil(TXZActivity.this);
29         sharedUtil.getPassNum();     //设置了初始的关卡数
30         new Thread(){        //加载的线程
31          public void run(){
32           synchronized(Constant.initLock) {
33              //加载图片数据进内存
34                     PicDataManager.loadPicData(TXZActivity.this);
35                     //加载物体顶点位置、纹理坐标数据进内存缓冲
36                     VertexDataManager.initVertexData(TXZActivity.this.getResources());
37                     SoundUtil.initSounds(TXZActivity.this);  //加载游戏音效
38         }} }.start();
39         gotoWelcomeView();        //到欢迎界面
40     }
41     ……//此处省略了本类中消息处理Handler代码,将在下面介绍
42     ……//此处省略了跳转到游戏中部分界面的方法,将在下面进行介绍
43     ……//此处省略了显示对话框的方法,读者可自行查阅随书光盘中源代码
44     ……//此处省略了本类中按键监听方法,将在下面进行介绍
45  ……//此处省略了本类中播放背景音乐方法,将在下面进行介绍
46  ……//此处省略了本类中停止播放背景音乐方法,将在下面进行介绍
47  ……//此处省略了重写的onResume与onPause方法,读者可以自行查阅随书光盘中的源代码
48 }

第13-18行是设置屏幕的显示模式,设置为全屏、横屏模式。第19-22行为根据设备的具体参数获取屏幕分辨率及宽高比,并记录下来,使游戏的界面符合设置的横屏模式。
第30-38行是图片、物体的顶点位置及纹理坐标和游戏音效的加载,初始化游戏资源。第39行为进入欢迎界面。
(2)游戏中部分界面的跳转和信息的显示依靠消息传递机制。在Activity中的消息接收者通过接收的消息编号执行相应的操作,来实现界面跳转及信息显示的功能,其代码如下。

1  public Handler handler = new Handler(){   //接收消息的handler
2  @Override
3  public void handleMessage(Message msg) {
4    super.handleMessage(msg);
5   switch (msg.what) {
6     case COMMAND_GOTO_GAME_VIEW:   //返回游戏界面
7      gotoGameView();
8     break;
9     case COMMAND_GOTO_MENU_VIEW:   //返回菜单界面
10      gotoMenuView();
11     break;
12     case COMMAND_GOTO_GUAN_VIEW:  //返回选关界面
13      gotoSelectView();
14      break;
15     case COMMAND_GOTO_SET_VIEW: //返回设置界面
16      gotoSetView();
17      break;
18   }}
19   };

第1-3行为初始化Handler并重写handleMessage方法,接收传来的消息。第5-17行为根据收到的消息进行判断,跳转到不同的界面。
(3)由于本类的跳转界面比较多,不可能对所用的界面跳转进行一一介绍,所以,这里只介绍部分具有代表性的界面跳转代码的开发,其代码如下。

1     public void gotoWelcomeView(){     //返回欢迎界面去的方法
2      TXZWelcomeView wv=new TXZWelcomeView(this);
3         setContentView(wv);      //返回欢迎界面
4     }
5     public void gotoMenuView(){     //返回菜单界面去的方法
6      TXZMenuView mv=new TXZMenuView(this);
7         setContentView(mv);      //返回菜单界面
8         currView=WhichView.MENU_VIEW;   //更新当前View到菜单View
9         if(IS_BEIJINGYINYUE) {  //如果IS_BEIJINGYINYUE为true,则播放背景音乐
10          if(beijingyinyue==null) {
11           playBeiJingYinYue();   //调用播放背景音乐的方法
12          }}
13     }
14     public void gotoGameView(    {   //返回游戏界面去的方法
15      synchronized(Constant.initLock) {
16       gv=new TXZGameSurfaceView(this);
17       setContentView(gv);           //返回游戏界面
18             gv.requestFocus();    //获取焦点
19             gv.setFocusableInTouchMode(true); //设置为可触控
20             currView=WhichView.GAME_VIEW;  //更新当前View到游戏View
21     }}

第1-4行是返回欢迎界面去的方法。第5-13行为返回菜单界面的方法,在方法中主要是创建界面的对象,并调用setContentView方法跳转到菜单界面,同时根据是否播放背景音乐的标志位进行背景音乐的播放。
第14-21行是返回游戏界面的方法,在方法中主要是创建界面的对象,并调用setContentView 方法跳转到菜单界面,同时设置为可触控。
(4)接下来开发onKeyDown方法,该方法为继承Activity后重写的方法,实现对手机按键的监听,玩家单击后做出相应的处理,其代码如下。

1 @Override
2 public boolean onKeyDown(int keyCode, KeyEvent event) { //监听返回键方法
3      if(keyCode!=4) {               //如果不是返回键则不做处理
4       return false;
5      }
6      if(keyCode==4) {         //当前是返回键
7          if(currView!=null) {
8              switch(currView) {
9                  case SET_VIEW:       //当前在设置界面
10                   SET_IS_WHILE=false;
11                   Constant.set_flag=false;
12                   gotoMenuView();     //到菜单界面
13                  break;
14                  case MENU_VIEW:     //当前在菜单界面
15                   MENU_IS_WHILE=false;    //菜单界面是否循环工作标志位
16                   Constant.menu_flag=false;
17                   stopBeiJingYinYue();    //停止播放背景音乐
18                   System.exit(0);     //退出程序
19                  break;
20                  case GAME_VIEW:     //当前在游戏界面
21                   backdialog();      //显示提示对话框
22                  break;
23                  case ABOUT_VIEW:     //当前在关于界面
24                   Constant.about_flag=false;   //关于界面是否循环工作标志位
25                   gotoMenuView();     //返回菜单界面
26                  break;
27                  case HELP_VIEW:     //当前在帮助界面
28                   gotoMenuView();     //返回菜单界面
29                  break;
30                  case GUAN_VIEW:     //当前在选关界面
31                   Constant.select_flag=false;  //选关界面是否循环工作标志位
32                   Constant.SELECT_IS_WHILE=false;  //选关界面是否循环工作标志位
33                   gotoMenuView();     //返回菜单界面
34                  break;
35              } }}
36      return false;
37     }

第3-5行是判断当前按下的键值,如果键值表示的是按下返回键,则在本方法中处理,否则不在本方法中处理。
第7-35行表示的是若当前界面不为空,则根据当前的界面做出不同的操作,即返回某个界面或显示对话框、或退出游戏。
(5)接下来为读者介绍的是播放背景音乐与停止播放背景音乐方法的开发,其代码如下。

1 public void playBeiJingYinYue(){      //播放背景音乐的方法
2      beijingyinyue=MediaPlayer.create(this,R.raw.mainmp3);
3      beijingyinyue.setLooping(true);     //设置为循环模式
4      beijingyinyue.start();       //开始播放音乐
5 }
6 public void stopBeiJingYinYue(){      //停止播放背景音乐的方法
7      if(beijingyinyue!=null) {
8       beijingyinyue.stop();       //停止播放音乐
9       beijingyinyue=null;
10      }
11      SharedPreferences.Editor editor=sp.edit();
12      editor.clear();         //清空sp中存储的所有内容
13  editor.commit();         //提交
14     }
15 }

这两种方法的开发非常简单,其实现的主要功能是对MediaPlayer的控制,同时在停止播放背景音乐时要清空SharedPreferences对象sp中存储的内容。

时间: 2024-10-29 04:21:54

《Android 3D 游戏案例开发大全》——6.4节主控制类——TXZActivity类的开发的相关文章

《Android 3D 游戏案例开发大全》——6.6节游戏界面相关类

6.6 游戏界面相关类 Android 3D 游戏案例开发大全 前一小节为读者介绍了辅助界面相关类,本小节将对游戏界面相关类进行介绍,首先介绍游戏界面的各个组成部分,然后介绍游戏整体界面的开发,逐步完成对游戏界面的开发,下面就对这些类的开发进行详细介绍. 6.6.1 顶点数据管理者VertexDataManager 本小节为读者介绍的是整个游戏过程中所有物体顶点数据的管理者VertexDataManager,具体开发步骤如下. (1)首先为读者介绍的是本类主要框架的开发,其代码如下. 1 pac

《Android 3D 游戏案例开发大全》——6.5节辅助界面相关类

6.5 辅助界面相关类 Android 3D 游戏案例开发大全 前一小节介绍了主控制类TXZActivity,本小节将对该游戏的辅助界面相关类进行介绍,该游戏的辅助界面主要是欢迎界面TXZWelcomeView类.菜单界面TXZMenuView类.设置界面TXZSetView类.帮助界面TXZHelpView类.选关界面TXZSelectView类,以及关于界面TXTAboutView类,下面就对这些类的开发进行详细介绍. 6.5.1 欢迎界面类TXZWelcomeView 欢迎界面是进入游戏的

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

6.7 相关工具类Android 3D 游戏案例开发大全为了实现程序中的功能,需要很多工具辅助方法,在开发时将相关的方法组织到一起就构成了一个个的工具类.工具类自己并不能实现什么具体的效果,但它是程序后台的支撑. 6.7.1 箱子排序类CompareDis本小节为读者介绍的是箱子排序类,该类通过比较箱子与摄像机之间距离来确定箱子的绘制顺序,其代码如下. 1 package com.bn.txz.manager; //声明包 2 public class CompareDis implements

《Android 3D 游戏案例开发大全》——6.1节游戏背景及功能概述

6.1 游戏背景及功能概述Android 3D 游戏案例开发大全本节将对3D游戏开发进行简单介绍,通过本节的学习,读者可以对3D版推箱子游戏有初步的认识,并了解本章开发案例的游戏效果及具体功能. 6.1.1 游戏背景概述推箱子是一款来自日本的古老游戏,目的是训练逻辑思考能力.要求在一个狭小的空间内把木箱放在指定的位置,稍有不小心就会出现箱子无法移动或者通道被堵的情况. 推箱子游戏是一款老少皆宜的益智类游戏,虽然游戏画面与玩法简单,但趣味无穷. 6.1.2 游戏功能简介介绍详细的开发步骤之前,首先

《Android 3D 游戏案例开发大全》——6.3节游戏的架构

6.3 游戏的架构Android 3D 游戏案例开发大全本节主要介绍本游戏的类框架,通过本节的介绍,读者可以进一步了解本游戏的开发过程,为后面要开发的代码部分打下坚实的基础. 6.3.1 各个类简要介绍为了使读者可以更好地了解各个类的作用,本小节将本游戏中用到的所有类分为4部分进行介绍,而每个类的代码将在后面的小节中相继给出. 1.公共类Activity的实现类TXZActivity.TXZActivity是本游戏中的主控制类,此类继承自Activity,是整个游戏的控制类,同时也是整个游戏的入

《Android 3D 游戏案例开发大全》——6.2节游戏的策划和准备工作

6.2 游戏的策划和准备工作Android 3D 游戏案例开发大全上一节介绍了本游戏的背景及功能,本节将介绍游戏的策划及开发前的准备工作,这些工作虽然略显枯燥,但是在游戏的开发过程中却起到很大的作用.在正式开发游戏前进行细致地策划能让开发人员在开发前对游戏有总体的把握,理清逻辑关系,使游戏开发过程更加顺利. 6.2.1 游戏的策划本小节将对游戏的策划进行简单介绍,在真实的游戏开发中,该步骤还需更细致.更具体.更全面,该游戏的策划如下所列. 游戏情节本游戏属于休闲益智类游戏,情景设置非常简单,主要

《Android 3D 游戏案例开发大全》——6.8节游戏的优化与改进

6.8 游戏的优化与改进Android 3D 游戏案例开发大全至此,本游戏的开发介绍完毕,虽然在开发过程中已经对游戏进行了很多的优化,但游戏中还是有一些不足,笔者在这里仅列出了几个方面. 游戏美工的改进在游戏开发时,笔者已经对美工做了一些工作,让整体界面比较美观,但还是可以改进的,通过对游戏中的图案美化和布局,让游戏更具吸引力. 游戏玩法的改进本游戏玩家可以选择想玩的关卡,但是由于本游戏的关卡并没有那么多.那么难,因此,读者可以根据自己的理解开发出不同挑战难度的游戏. 游戏的进一步优化.虽然笔者

《Android 3D 游戏案例开发大全》——导读

目 录 第1章 千里之行始于足下--Android 平台简介及开发环境的使用第2章 棋牌类3D游戏--国际象棋人机对弈第3章 物理引擎3D游戏 --疯狂的石头第4章 蓝牙对战游戏第5章 竞速类游戏--快乐小球第6章 益智类游戏--3D推箱子 6.1 游戏背景及功能概述6.2 游戏的策划和准备工作 6.3 游戏的架构 6.4 主控制类--TXZActivity类的开发6.5 辅助界面相关类 6.6 游戏界面相关类 6.7 相关工具类 6.8 游戏的优化与改进 第7章 物理引擎类游戏--3D抽方块第

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.4节Hello Android应用程序的开发

1.4 Hello Android应用程序的开发 Android 3D游戏开发技术宝典--OpenGL ES 2.0 本节首先将介绍如何在Eclipse中创建一个基于Android的Hello World应用程序,之后将简单介绍Android应用程序的调试,为读者以后学习高级开发铺平道路. 1.4.1 第一个Android应用程序 本小节将向读者介绍如何在Eclipse中创建一个基于Android的Hello World应用程序,基本步骤如下所列. (1)首先打开Eclipse,然后依次选择Fi