Android游戏开发之十三:Sensor感应实例

移动开发 Android 游戏开发
本文将主要讨论Android游戏开发中的Sensor感应实例。注意,Android 2.2平台中曾没有具体的感应判断逻辑。

下面我们首先来定义下常用的感应动作事件。这里提醒大家由于是三轴的立体空间感应所以相对于轨迹球、导航键的上下左右外,还提供了前后的感应,所以我们定义最基本的六种空间方向。

  1. public static final int CWJ_UP = 0;    
  2. public static final int CWJ_DOWN = 1;    
  3. public static final int CWJ_LEFT = 2;    
  4. public static final int CWJ_RIGHT = 4;    
  5. public static final int CWJ_FORWARD = 8//向前    
  6. public static final int CWJ_BACKWARD = 16//向后  

下面我们做精确的角度旋转修正值定义,我们用到yaw、pitch和roll,相信学过3D开发的网友不会对这些陌生的,我们就把他们对应为绕y、x、z轴的角度好了,如果你们没有学过3D相关的知识这里推荐大家可以通过Cube例子自定义Render来观察这三个值对应立方体的旋转角度。

Yaw在(0,0,0)中, 以xOz的坐标平面中围绕y轴旋转,如果是负角则我们定义为CWJ_YAW_LEFT 即往左边倾斜,同理我们定义如下:

  1. public static final int CWJ_YAW_LEFT = 0;    
  2. public static final int CWJ_YAW_RIGHT = 1;    
  3. public static final int CWJ_PITCH_UP = 2;    
  4. public static final int CWJ_PITCH_DOWN = 4;    
  5. public static final int CWJ_ROLL_LEFT = 8;    
  6. public static final int CWJ_ROLL_RIGHT = 16;   

我们通过加速感应器可以获得SensorEvent的四个值,下面给大家一个简单示例,不考虑其他因素,在public int accuracy 、public Sensor sensor 、public long timestamp  和public final float[] values 中,我们获取values的浮点数组来判断方向。

  1. int nAndroid123=CWJ_UP //向上    
  2. float ax = values[0];    
  3. float ay = values[1];    
  4. float az = values[2];    
  5. float absx = Math.abs(ax);    
  6. float absy = Math.abs(ay);    
  7. float absz = Math.abs(az);    
  8. if (absx > absy && absx > absz) {    
  9.    if (ax > 0) {    
  10.       nAndroid123 = CWJ_RIGHT;    
  11.    } else {    
  12.       nAndroid123 = CWJ_LEFT;    
  13.    }    
  14. else if (absy > absx && absy > absz) {    
  15.    if (ay > 0) {    
  16.       nAndroid123= CWJ_FORWARD;    
  17.    } else {    
  18.       nAndroid123= CWJ_BACKWARD;    
  19.    }    
  20. else if (absz > absx && absz > absy) {    
  21.    if (az > 0) {    
  22.       nAndroid123 = CWJ_UP;    
  23.    } else {    
  24.       nAndroid123 = CWJ_DOWN;    
  25.    }    
  26. else {    
  27.       nAndroid123 = CWJ_UNKNOWN;    
  28. }   

有关偏向角度问题,我们将在下一次详细讲述,对于一般的2D游戏,我们可以参考本文来实现重力控制,所以总体来说Android游戏开发比较简单易懂,Android平台使用的Java语言还是很适合做游戏的。在逻辑表达上更清晰。

责任编辑:闫佳明 来源: jizhuomi
相关推荐

2013-05-21 11:24:07

Android游戏开发Sensor重力感应

2013-05-21 09:56:15

2013-05-20 17:51:47

Android游戏开发SurfaceView

2013-05-20 15:42:22

2012-05-28 15:55:47

XNA 重力感应

2013-05-20 17:13:17

Android游戏开发CanvasPaint

2011-04-12 08:40:23

IMFAndroid

2013-08-01 14:03:49

JavaScript

2012-12-24 09:01:41

iOSUnity3D

2013-05-21 13:55:51

Android游戏开发图像渐变特效

2013-05-20 17:48:20

2013-05-21 10:42:48

Android游戏开发Bitmap位图旋转

2013-05-21 13:33:02

Android游戏开发异步音乐播放

2013-05-21 14:15:23

Android游戏开发屏幕分辨率

2013-05-21 14:10:11

Android游戏开发SoundPool类同时多音效

2013-05-20 17:33:44

Android游戏开发自定义View

2013-05-21 14:22:29

Android游戏开发捕获屏幕双击事件

2010-01-27 17:17:42

Android重力感应

2013-05-21 15:28:31

2013-05-21 16:17:13

点赞
收藏

51CTO技术栈公众号