public class Aircraft_Activity extends Activity
{
GLGameView gameView;//主游戏场景
static Handler handler;//消息接收器
SoundPool soundPool;//声音池
Vibrator mVibrator;//震动器
public MediaPlayer bgMusic[]=new MediaPlayer[2];//游戏背景音乐播放器
HashMap<Integer,Integer> soundMap;//存放声音池中的声音ID的Map
SensorManager mySensorManager;//传感器的引用
private boolean isNoBack;//返回键屏蔽主要是在欢迎界面播放过程中,屏蔽返回键
private int flag;//判断当前屏幕是否能够旋转的标志位
public float[] directionDotXY;//用于记录传感器的数据.directionDotXY[0]表示左右旋转,
public float lr_domain=4;//传感器左右旋转地阈值
private SensorListener mySensorListener = new SensorListener()
{
@Override
public void onAccuracyChanged(int sensor, int accuracy){}
@Override
public void onSensorChanged(int sensor, float[] values)
{
if(sensor == SensorManager.SENSOR_ORIENTATION)
{
directionDotXY=RotateUtil.getDirectionDot
(
new double[]{values[0],values[1],values[2]}
);
if(directionDotXY[0]>lr_domain)
{
//左转
keyState=keyState|0x4;
keyState=keyState&0x7;
}
else if(directionDotXY[0]<-lr_domain)
{
//右转
keyState=keyState|0x8;
keyState=keyState&0xB;
}
else
{
//相关数据复位
keyState=keyState&0xB;
keyState=keyState&0x7;
}}}};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
flag =Settings.System.getInt(this.getContentResolver(), //判断当前是否能够旋转屏
Settings.System.ACCELEROMETER_ROTATION, 0);
if(flag==0)//打开旋转屏
{
Settings.System.putInt(this.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION,1);
}
mySensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);//传感器管理者
initScreen();//初始化屏幕
initHandler();//消息接收器
initSound();//初始化
initDatebase();
collisionShake();//初始化振动器
goTo_StartVideo();
}
//消息接收器方法
public void initHandler()
{
handler=new Handler()
{
@Override
public void handleMessage(Message msg)//重写方法
{
switch(msg.what)
{
case 1:
isNoBack=false;//返回键可用
gameView=new GLGameView(Aircraft_Activity.this);
setContentView(gameView);
bgMusic[0].start();//开启背景音乐
break;
}}};}
//初始化屏幕分辨率
public void initScreen()
{
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉通知栏
getWindow().setFlags//全屏显示
(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int tempHeight=(int) (SCREEN_HEIGHT=dm.heightPixels);
int tempWidth=(int) (SCREEN_WIDTH=dm.widthPixels);
if(tempHeight<tempWidth)
{
SCREEN_HEIGHT=tempHeight;
SCREEN_WIDTH=tempWidth;
}
else
{
SCREEN_HEIGHT=tempWidth;
SCREEN_WIDTH=tempHeight;
}
ratio_width=SCREEN_WIDTH/800;
ratio_height=SCREEN_HEIGHT/480;
}
public void initDatebase()
{
String sql="create table if not exists plane(map char(2),grade char(4),time char(4),date char(10));";
SQLiteUtil.createTable(sql);//建表SQL语句
}
public void goTo_StartVideo(){ //游戏开始首先播放视频
isNoBack=true;//返回键不可用
setContentView(R.layout.start_video);
final MyVideoView myVideoView=(MyVideoView)findViewById(R.id.start_video_videoview);
myVideoView.setVideoURI(Uri.parse("android.resource://com.bn.menu/" + R.raw.logo));
myVideoView.start();
myVideoView.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp){
if(getGLVersion()<2){//这里进行opengles测试
//弹出对话框,说明不支持该游戏
showDialog(0);
}else if(Build.VERSION.SDK_INT<Build.VERSION_CODES.FROYO){
showDialog(1);
}else
handler.sendEmptyMessage(1);//进入主菜单界面
}});
}
public int getGLVersion()//获取OPENGLES所支持的最高版本
{
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo info = am.getDeviceConfigurationInfo();
int majorVersion=info.reqGlEsVersion;
majorVersion=majorVersion>>>16;
return majorVersion;
}
public void collisionShake()//手机震动
{
mVibrator=(Vibrator)getApplication().getSystemService
(Service.VIBRATOR_SERVICE);
}
public void shake()//震动
{
if(0==isVibrateOn)//开启震动
{
mVibrator.vibrate( new long[]{0,30},-1);
}
}
public void initSound()//加载声音资源
{
bgMusic[0]=MediaPlayer.create(this,R.raw.menubg_music);
bgMusic[0].setLooping(true);//是否循环
bgMusic[0].setVolume(0.3f, 0.3f);//声音大小
bgMusic[1]=MediaPlayer.create(this,R.raw.gamebg_music);
bgMusic[1].setLooping(true);//是否循环
bgMusic[1].setVolume(0.5f, 0.5f);//声音大小
soundPool=new SoundPool(4,AudioManager.STREAM_MUSIC,100);//创建声音池
soundMap=new HashMap<Integer,Integer>();//创建map
soundMap.put(0, soundPool.load(this, R.raw.explode,1));//飞机撞山或者死亡的声音
soundMap.put(1, soundPool.load(this, R.raw.awp_fire,1));//坦克和高射炮被击毙爆炸
soundMap.put(2, soundPool.load(this, R.raw.r700_fire,1));//爆炸
soundMap.put(3, soundPool.load(this, R.raw.bullet,1));//飞机发射子弹声音
soundMap.put(4, soundPool.load(this, R.raw.missile,1));//发射子弹声音
soundMap.put(5, soundPool.load(this, R.raw.m16_fire,1));//发射子弹声音
soundMap.put(6, soundPool.load(this, R.raw.rpg7_fire,1));//发射子弹声音
soundMap.put(7, soundPool.load(this, R.raw.w1200_fire,1));//坦克发射子弹声音
soundMap.put(8, soundPool.load(this, R.raw.ground,1));//坦克发射子弹声音
soundMap.put(9, soundPool.load(this, R.raw.rotation,1));//
}
//播放声音的方法
public void playSound(int sound,int loop)
{
if(0!=isSoundOn)
{
return;
}
AudioManager mgr = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;
soundPool.play
(
soundMap.get(sound), //声音资源id
volume, //左声道音量
volume, //右声道音量
1, //优先级
loop, //循环次数 -1带表永远循环
0.5f //回放速度0.5f~2.0f之间
);
}
@Override
public Dialog onCreateDialog(int id)
{
Dialog dialog=null;
switch(id)
{
case 0://生成普通对话框的代码
String msg="该设备所支持的opengles版本过低,不支持此游戏!!!";
Builder b=new AlertDialog.Builder(this);
b.setIcon(R.drawable.icon);//设置图标
b.setTitle("不好意思...");//设置标题
b.setMessage(msg);//设置信息
b.setPositiveButton(//为对话框设置按钮
"退出" ,
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
System.exit(0);
}});
dialog=b.create();
break;
case 1://生成普通对话框的代码
String msgt="该设备当前Android版本是低于2.2,不支持此游戏!!!";
Builder bb=new AlertDialog.Builder(this);
bb.setIcon(R.drawable.icon);//设置图标
bb.setTitle("不好意思...");//设置标题
bb.setMessage(msgt);//设置信息
bb.setPositiveButton(//为对话框设置按钮
"退出" ,
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
System.exit(0);
}});
dialog=bb.create();
break;
}
return dialog;
}
@Override
protected void onResume()
{
super.onResume();
mySensorManager.registerListener(//注册监听 方法
mySensorListener,
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_UI
);
}
@Override
protected void onPause()
{
super.onPause();
mySensorManager.unregisterListener(mySensorListener); //取消注册监听器
}
public void exitRelease()//退出时需要执行的方法
{
if(flag==0)//关掉旋转屏
{
Settings.System.putInt(this.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION,0);
}
System.exit(0);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent e)//设置屏幕监听
{
if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN||keyCode==KeyEvent.KEYCODE_VOLUME_UP)//控制音量键只能控制媒体音量的大小
{
setVolumeControlStream(AudioManager.STREAM_MUSIC);
return super.onKeyDown(keyCode, e);
}
if(keyCode==4)
{
if(isNoBack)//返回键屏蔽
{
return true;
}
if(!gameView.isGameOn)
{
return gameView.onKeyBackEvent();
}
else //游戏开始了
{
if(!isCrash&&!isOvercome)
{
if(!isVideo)
{
is_button_return=!is_button_return;//按下返回按钮
if(bgMusic[1].isPlaying())
{
bgMusic[1].pause();
}
else if(!bgMusic[1].isPlaying()&&isMusicOn==0)
{
bgMusic[1].start();
}
}
else
{
gameView.isTrueButtonAction=true;
GLGameView.isVideoPlaying=!GLGameView.isVideoPlaying;
if(bgMusic[1].isPlaying())
{
bgMusic[1].pause();
}
else if(!bgMusic[1].isPlaying()&&isMusicOn==0)
{
bgMusic[1].start();
}
}
}
return true;
}
}
return true;
}}