zoukankan      html  css  js  c++  java
  • Activity类

    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;
        }}
    

  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/Anzhongliu/p/6092074.html
Copyright © 2011-2022 走看看