加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Android 手机重力感应实现简单详解

发布时间:2021-11-25 20:37:31 所属栏目:教程 来源:互联网
导读:现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 。 今天我用简单的代码为大家介绍一下Android 下重力感应的实现方式 下面是一个模拟器的屏幕 Y轴 以屏幕的左下方为原点 ,向上为正 向下为负数(刚好和编程时坐标是相反的 向下为
现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 。 今天我用简单的代码为大家介绍一下Android 下重力感应的实现方式 下面是一个模拟器的屏幕  Y轴 以屏幕的左下方为原点 ,向上为正 向下为负数(刚好和编程时坐标是相反的 向下为正 向上为负数)。从-10到10。 X轴 以屏幕左下方为原点 向左为正 向右为负数取值范围从-10到10 。 Z轴 朝天就是正数 朝地就是负数数取值范围从-10到10 。由此可见重力感应的取值范围都是在 -10 到10之间的 我们就可以根据这个数字算出 速度 加速度 等等。
 
 
 
下面我介绍一下代码的实现方式
 
private SensorManager sensorMgr;    
Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);     
  
 //保存上一次 x y z 的坐标   
 float bx = 0;  
 float by = 0;  
 float bz = 0;  
 long btime = 0;//这一次的时间    
 sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);     
    SensorEventListener lsn = new SensorEventListener() {     
        public void onSensorChanged(SensorEvent e) {     
           float x = e.values[SensorManager.DATA_X];        
           float y = e.values[SensorManager.DATA_Y];        
           float z = e.values[SensorManager.DATA_Z];    
           //在这里我们可以计算出 X Y Z的数值 下面我们就可以根据这个数值来计算摇晃的速度了    
           //我想大家应该都知道计算速度的公事 速度 = 路程/时间   
           //X轴的速度   
           float speadX = (x - bx) / (System.currentTimeMillis() - btime);   
           //y轴的速度   
           float speadY = (y - by) / (System.currentTimeMillis() - btime);   
           //z轴的速度   
           float speadZ = (z - bz) / (System.currentTimeMillis() - btime);   
           //这样简单的速度就可以计算出来 如果你想计算加速度 也可以 在运动学里,加速度a与速度,   
           //位移都有关系:Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a),根据这些信息也可以求解a。    
           //这里就不详细介绍了 公事 应该初中物理课老师就教了呵呵~~   
  
           bx = x;  
           by = y;  
           bz = z;  
  
           btime = System.currentTimeMillis();  
  
  
        }     
             
        public void onAccuracyChanged(Sensor s, int accuracy) {     
        }     
    };     
    // 注册listener,第三个参数是检测的精确度   
    sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);  

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读