Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發教程之十三:Sensor感應實例

Android游戲開發教程之十三:Sensor感應實例

編輯:Android游戲開發

       本文將主要討論Android游戲開發中的Sensor感應實例。注意,Android 2.2平台中曾沒有具體的感應判斷邏輯。

       下面我們首先來定義下常用的感應動作事件。這裡提醒大家由於是三軸的立體空間感應所以相對於軌跡球、導航鍵的上下左右外,還提供了前後的感應,所以我們定義最基本的六種空間方向。

Java代碼
  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相關的知識這裡Android開發網推薦大家可以通過Cube例子自定義Render來觀察這三個值對應立方體的旋轉角度。

       Yaw在(0,0,0)中, 以xOz的坐標平面中圍繞y軸旋轉,如果是負角則我們定義為CWJ_YAW_LEFT 即往左邊傾斜,同理我們定義如下:

Java代碼
  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的浮點數組來判斷方向。

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

       有關偏向角度問題,我們將在下一次詳細講述,對於一般的2D游戲,我們可以參考本文來實現重力控制,所以總體來說Android游戲開發比較簡單易懂,Android平台使用的Java語言還是很適合做游戲的。在邏輯表達上更清晰。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved