Android遊戲開發中加速度感測器的實現

2021-06-20 11:36:48 字數 3863 閱讀 7172

android

遊戲開發重力感應主要是依靠手機的加速度感測器

(accelerometer)

來實現。

在android遊戲開發中一共有八種感測器但是不一定每一款真機都支援這些感測器。因為很多功能使用者根本不care

的所以可能開發商會把某些功能遮蔽掉。還是得根據真機的實際情況來做開發,今天我們主要來討論

android

遊戲開發

中加速度感測器的具體實現方式。

感測器名稱如下:

加速度感測器(accelerometer)

陀螺儀感測器(gyroscope)

環境光照感測器(light)

磁力感測器(magnetic field)

方向感測器(orientation)

壓力感測器(pressure)

距離感測器(proximity)

溫度感測器(temperature)

1.sensormannager

感測器管理物件

手機中的所有感測器都須要通過sensormannager

來訪問,呼叫

getsystemservice(sensor_service)

方法就可以拿到當前手機的感測器管理物件。

sensormanager msensormgr = (sensormanager) getsystemservice(sensor_service);

複製**

2.實現

sensoreventlistener介面

說道sensoreventlistener

介面就不得不說

sensorlistener

介面。在

android1.5

一下是通過實現

sensorlistener

介面來捕獲 手機感測器狀態,但是在

1.5以上如果實現這個介面系統會提示你這行**已經過期。今天我們不討論

sensorlistener

因為它已經是過時的東西了。主要討論一下

sensoreventlistener

介面。我們須要實現

sensoreventlistener

這個介面 

onsensorchanged(sensorevent event)

方法來捕獲手機感測器的狀態,拿到手機 x軸

y軸z軸三個方向的重力分量,有了這三個方向的資料重力感應的原理我們就已經學會了,簡單吧

public void onsensorchanged(sensorevent e) 

複製**

如圖所示:上例**中 float x y z 3

個方向的取值範圍是在 

-10 

到 10 

之間,我向同學們說明一下 x軸 

y軸 z軸 重力分量的含義。 這裡須要注意的是座標原點 向天空為正數 向地面為負數 剛好與程式設計時座標是相反的。

手機螢幕向左側方當x

軸就朝向天空,垂直放置 這時候 

y 軸 與 

z軸沒有重力分量,因為

x軸朝向天空所以它的重力分量則最大 。這時候x軸 

y軸 z軸的重力分量的值分別為

(10,0,

0) 手機螢幕向右側方當x

軸就朝向地面,垂直放置 這時候 

y 軸 與 

z軸沒有重力分量,因為

x軸朝向地面所以它的重力分量則最小 。這時候x軸 

y軸 z軸的重力分量的值分別為

(-10,0

,0)手機螢幕垂直豎立放置方當y

軸就朝向天空,垂直放置 這時候 

x 軸 與 

z軸沒有重力分量,因為

y軸朝向天空所以它的重力分量則最大 。這時候x軸 

y軸 z軸的重力分量的值分別為(0,

10,0)

手機螢幕垂直豎立放置方當y

軸就朝向地面,垂直放置 這時候 

x 軸 與 

z軸沒有重力分量,因為

y軸朝向地面所以它的重力分量則最小 。這時候x軸 

y軸 z軸的重力分量的值分別為(0,

-10,0)

手機螢幕向上當z

軸就朝向天空,水平放置 這時候 

x 軸與

y軸沒有重力分量,因為

z軸朝向天空所以它的重力分量則最大 。這時候x軸 

y軸 z軸的重力分量的值分別為(0,

0,10)

手機螢幕向上當z

軸就朝向地面,水平放置 這時候 

x 軸與

y軸沒有重力分量,因為

z軸朝向地面所以它的重力分量則最小 。這時候x軸 

y軸 z軸的重力分量的值分別為(0,

0,-10) 3.

註冊sensoreventlistener

使用sensormannager

呼叫getdefaultsensor(sensor.type_accelerometer)

方法拿到加速重力感應的

sensor

物件。因為本章我們討論重力加速度感測器所以引數為

sensor.type_accelerometer

,如果須要拿到其它的感測器須要傳入對應的名稱。使用

sensormannager

呼叫registerlistener()

方法來註冊,第三個引數是檢測的靈敏精確度根據不同的需求來選擇精準度,遊戲開發建議使用 

sensormanager.sensor_delay_game。

、msensormgr = (sensormanager) getsystemservice(sensor_service);

、msensor = msensormgr.getdefaultsensor(sensor.type_accelerometer);

// 註冊listener

,第三個引數是檢測的精確度

//sensor_delay_fastest 

最靈敏 因為太快了沒必要使用

//sensor_delay_game 

遊戲開發中使用

//sensor_delay_normal 

正常速度

//sensor_delay_ui 

最慢的速度

msensormgr.registerlistener(this, msensor, sensormanager.sensor_delay_game);

複製**

重力感應簡單速度計算的方式。 每次搖晃手機計算出 x軸 y

軸 z軸的重力分量可以將它們記錄下來 然後每次搖晃的重力分量和之前的重力分量可以做乙個對比 利用差值和時間就可以計算出他們的移動速度。

、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 onaccuracychanged(sensor s, int accuracy)  };

// 註冊listener

,第三個引數是檢測的精確度

sensormgr.registerlistener(lsn, sensor, sensormanager.sensor_delay_game);

iOS中加速度感測器的使用

1 實現例如以下 import uikit import coremotion class viewcontroller uiviewcontroller cmm.accelerometerupdateinterval 1 1s獲取一次加速度資料 if cmm.accelerometer ailab...

成長需要加速度

如果說慣性維持著薪水,那麼加速度代表著獎金和加薪。近來和同事們聊起個人發展問題。發現程式設計師 其他行業估計也是如此 一到工作一年到兩年之間,就會出現乙個迷茫期。不知道自己的發展方向在 有些公司雖然推出了職業規劃,但很多人的關鍵問題在於不能正確認識自己的位置。那麼走哪個職業方向,便變得不能順利掌握。...

Java中的加速度

在畫圖的過程中,如果設定了圖形方向的轉換,在圖形經過介面邊界的時候,我們會發現這時候方向的突然改變會使得介面顯得不連貫,沒有美感!那可以怎麼美化呢?我們在這裡介紹到vector方法,簡言之就是將目標點看成乙個向量點或者說運動學點,可以改變其方向和加速度,然後定義乙個向量類,並定義其中的屬性和方法 建...