Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          有關Android游戲開發中的Sensor感應示例今天我們將一起來討論,對于目前最新的Android 2.2平臺 而言仍然沒有具體的感應判斷邏輯,下面我們一起定義 下常用的感應動作事件。首先Android123提醒大家由于是三軸的立體空間感應所以相對于軌跡球、導航鍵的上下左右外,還提供了前后的感應,所以我們定義最基本的六種空間方向。

          view plaincopy to clipboardprint?
          public static final int CWJ_UP = 0;  
          public static final int CWJ_DOWN = 1;  
          public static final int CWJ_LEFT = 2;  
          public static final int CWJ_RIGHT = 4;  
          public static final int CWJ_FORWARD = 8; //向前  
          public static final int CWJ_BACKWARD = 16; //向后 
          public static final int CWJ_UP = 0;
          public static final int CWJ_DOWN = 1;
          public static final int CWJ_LEFT = 2;
          public static final int CWJ_RIGHT = 4;
          public static final int CWJ_FORWARD = 8; //向前
          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 即往左邊傾斜,同理我們定義如下:

          view plaincopy to clipboardprint?
          public static final int CWJ_YAW_LEFT = 0;  
          public static final int CWJ_YAW_RIGHT = 1;  
          public static final int CWJ_PITCH_UP = 2;  
          public static final int CWJ_PITCH_DOWN = 4;  
          public static final int CWJ_ROLL_LEFT = 8;  
          public static final int CWJ_ROLL_RIGHT = 16; 
          public static final int CWJ_YAW_LEFT = 0;
          public static final int CWJ_YAW_RIGHT = 1;
          public static final int CWJ_PITCH_UP = 2;
          public static final int CWJ_PITCH_DOWN = 4;
          public static final int CWJ_ROLL_LEFT = 8;
          public static final int CWJ_ROLL_RIGHT = 16;

          我們通過加速感應器可以獲得SensorEvent的四個值,今天Android123給大家一個簡單示例,不考慮其他因素,在public int accuracy 、public Sensor sensor 、public long timestamp  和  public final float[] values 中,我們獲取values的浮點數組來判斷方向。

          view plaincopy to clipboardprint?
          int nAndroid123=CWJ_UP //向上  
          float ax = values[0];  
          float ay = values[1];  
          float az = values[2];  
           
          float absx = Math.abs(ax);  
          float absy = Math.abs(ay);  
          float absz = Math.abs(az);  
              
          if (absx > absy && absx > absz) {  
          if (ax > 0) {  
            nAndroid123 = CWJ_RIGHT;  
          } else {  
            nAndroid123 = CWJ_LEFT;  
          }  
          } else if (absy > absx && absy > absz) {  
           
          if (ay > 0) {  
          nAndroid123= CWJ_FORWARD;  
          } else {  
          nAndroid123= CWJ_BACKWARD;  
          }  
          } else if (absz > absx && absz > absy) {  
          if (az > 0) {  
            nAndroid123 = CWJ_UP;  
          } else {  
            nAndroid123 = CWJ_DOWN;  
          }  
          } else {  
          nAndroid123 = CWJ_UNKNOWN;  

                int nAndroid123=CWJ_UP //向上
                float ax = values[0];
                float ay = values[1];
                float az = values[2];
               
                float absx = Math.abs(ax);
                float absy = Math.abs(ay);
                float absz = Math.abs(az);
                 
                if (absx > absy && absx > absz) {
                if (ax > 0) {
                  nAndroid123 = CWJ_RIGHT;
                } else {
                  nAndroid123 = CWJ_LEFT;
                }
                } else if (absy > absx && absy > absz) {
             
                if (ay > 0) {
                nAndroid123= CWJ_FORWARD;
                } else {
                nAndroid123= CWJ_BACKWARD;
                }
                } else if (absz > absx && absz > absy) {
                if (az > 0) {
                  nAndroid123 = CWJ_UP;
                } else {
                  nAndroid123 = CWJ_DOWN;
                }
                } else {
                nAndroid123 = CWJ_UNKNOWN;
                }

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

           

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/JavaTiger427/archive/2010/11/25/6034640.aspx



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 探索| 阿拉善左旗| 枣阳市| 阿尔山市| 克东县| 台南县| 囊谦县| 漳州市| 宝兴县| 宝应县| 遂溪县| 丁青县| 蕉岭县| 巴南区| 敖汉旗| 徐水县| 曲麻莱县| 大港区| 故城县| 肃南| 乌鲁木齐市| 太和县| 华安县| 正蓝旗| 城步| 南溪县| 大余县| 阳城县| 铜梁县| 南昌县| 古交市| 威远县| 凌海市| 望谟县| 宝应县| 四川省| 荃湾区| 长垣县| 册亨县| 阳原县| 宁城县|