2011-01-29 73 views
2

我之前創建了一個與Firefox的MozOrientation配合使用的迷宮遊戲。我現在正在考慮讓它和WebKit一起工作......如何將deviceorientation映射到MozOrientation值

但是Webkit使用w3c的DeviceOrientation。這些值看起來完全不同,但有人必須有一些算法才能從一個到另一個?或者我錯過了一些簡單的東西?

迷宮遊戲github上鍊路 http://playground.marmaladeontoast.co.uk/labyrinth/

MozOrientation https://developer.mozilla.org/en/Detecting_device_orientation

DeviceOrientation http://dev.w3.org/geo/api/spec-source-orientation.html

我已經獲得了一些採樣值:

alpha = null          
beta = -178 
gamma = 4.57  

火狐

x = 0.035999998450279236 
y = -0.02800000086426735 
z = 1 

任何幫助,將不勝感激:)

回答

1

我一直是這樣有點玩耍。下面的來源'映射'x/gamma和y/beta可以理解的度數範圍的替代方案。

MozOrientation.z的值與deviceorientation.alpha值完全不同。第一個返回垂直方向,後者返回一個羅盤值。因此這些值不可互換/可轉換。

function displayOrientation(orientData){ 

    var x = Math.round(orientData.x); 
    var y = Math.round(orientData.y); 
    var z = orientData.z; 

    document.getElementById('x').value = x; 
    document.getElementById('y').value = y; 
    document.getElementById('z').value = z; 
} 

window.addEventListener("MozOrientation", function(orientData){ 

    var obj = {}; 
    obj.x = orientData.x * 90; 
    obj.y = orientData.y * 90; 
    obj.z = orientData.z; 

    displayOrientation(obj); 

}, true); 

window.addEventListener("deviceorientation", function(orientData) { 

    var obj = {}; 
    obj.x = orientData.gamma; 
    obj.y = orientData.beta; 
    obj.z = orientData.alpha; 

    displayOrientation(obj); 

}, true); 

看來目前的桌面Safari(5.0.3)根本不支持這個事件。臺式機Chrome 9中的beta值比移動Safari中的低180。 Firefox和移動版Safari中的x值應大致相同。

+0

優秀的,謝謝julesj :)這一直在竊聽我一段時間......我以爲我只是缺少一些顯而易見的明顯的數學一段時間。我的白板充滿了圖表和方程... – sydlawrence 2011-02-11 19:51:40

+0

任何想法如何規範`DeviceMotionEvent`? – yckart 2013-04-19 17:36:35

0

你應該能夠計算出另一個。 我看到的問題是Mozilla沒有說明它返回的數據是什麼意思。 我現在正在使用三種移動設備:ipad,iphone4和nokia n900。 當我使用iOS和Safari瀏覽器並獲得accelerationIncludingGravity時,我的值從-9.8到9.8。那些影響每個斧頭的重力值。然後使用三角函數,我可以計算出每個斧頭的角度。 如果我在iphone4中定位,我可以直接在每個斧頭的角度。

問題出在諾基亞n900,其瀏覽器基於Mozilla。該瀏覽器只返回從-1到1的數據。文檔說,這是每個斧頭的傾斜。在什麼統一體?餘弦?或者只是角度/ 180? 我猜這是餘弦,因爲當我把它放在水平位置時,它返回0,當我把它放在垂直位置時,它將變爲1.倒過來,返回-1。此外,如果您將其傾斜到60度左右,則返回1/2。

據我所見,當使用帶有Firefox的Macbook筆記本電腦時,數據x,y和z會以餘弦形式出現。

1

我希望這段代碼能夠澄清一切。雖然這個值的代碼返回不能與β和γ值直接匹配:

Mozilla的返回角度的罪惡如此,獲得角...

X: Math.asin(eventInfo.x)*180/Math.PI 
Y: Math.asin(eventInfo.y)*180/Math.PI 
Z: Math.asin(eventInfo.z)*180/Math.PI 

的Webkit返回每個斧頭的加速度。然後,爲了獲取角度......(唱的變化僅僅是統一的返回值)

X: Math.asin(clean(eventInfo.accelerationIncludingGravity.x/GRAVITY))*180/Math.PI 
Y: Math.asin(clean(-eventInfo.accelerationIncludingGravity.y/GRAVITY))*180/Math.PI 
Z: Math.asin(clean(-eventInfo.accelerationIncludingGravity.z/GRAVITY))*180/Math.PI 

作爲清潔:(因爲有時候,返回的數據,即使沒有加速的手機,它比9.8)

function clean(data) 
{ 
    if(data<-1.0) 
    { 
     return -1.0; 
    } 
    else 
    {if(data>1.0) 
    { 
     return 1.0; 
    }else 
    { 
     return data; 
    }} 
} 

每個斧頭的含義是: X->手機向左或向右傾斜。如果您將手機向右傾斜(順時針),將音量調高。 Y->如果鎖定/開/關按鈕向上 - (角度+)或向下(角度 - ),則判斷手機是否向上。它會告訴手機相對於地板的傾斜度。 (Y向量與平面X-Z的角度) Z->判斷手機屏幕是朝上(角度+)還是倒置(角度 - )。這是在Z向量在平面的夾角X-Y

希望這是值得你!

無論如何,我正在研究一些GWT類來使這個工作更容易:)這並不困難,但我沒有那麼多時間。 我會告訴你

0

Mozilla Firefox瀏覽器現在完全支持W3C的DeviceOrientation事件API。您不應再在您的Web應用程序中使用MozOrientation