如何将deviceorientation映射到MozOrientation值

时间:2011-01-29 23:30:59

标签: javascript firefox html5 google-chrome webkit

我之前创建了一个与Firefox的MozOrientation配合使用的迷宫游戏。我现在正在研究如何使用WebKit ...

但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

非常感谢任何帮助:)

4 个答案:

答案 0 :(得分: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。 x& Firefox和移动版Safari中的y值应该大致相同。

答案 1 :(得分:1)

我希望这些代码能够澄清一切。虽然此代码返回的值无法直接与beta和gamma的值匹配:

Mozilla返回角度的sin,以获得角度......

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-&GT;移动设备向右或向左倾斜。如果您将移动设备向右倾斜(顺时针方向),则保持+,保持按钮音量增大。 Y-&GT;告诉手机是否已启动 - 如果锁定/开关按钮向上(角度+)或向下(角度 - )。它告诉移动设备相对于地板的倾斜度。 (Y矢量与平面X-Z的角度) Z-&GT;判断移动屏幕是朝上(角度+)还是上下颠倒(角度 - )。它是平面Y-X

上Z向量的角度

希望这对你有用!

无论如何,我正在研究一些GWT课程,以便更轻松地工作:)这并不难,但我没有那么多时间。 我会告诉你的

答案 2 :(得分:0)

你应该能够根据另一个来计算一个。 我看到的问题是Mozilla没有告诉它返回的数据是什么意思。 我现在正在使用三种移动设备:ipad,iphone4和nokia n900。 当我使用iOS和safari并获得accelerationIncludingGravity时,我得到的值从-9.8到9.8。这些是影响每个斧头的重力值。然后使用三角学,我可以计算每个斧头的角度。 如果我在iphone4中获得方向,我可以直接获得每个斧头的角度。

问题来自nokia n900,其浏览器基于Mozilla。该浏览器只返回-1到1的数据。文档说这是每个斧头的倾斜。在什么统一?余弦?或者只是角度/ 180°? 我猜它是余弦,因为当我把它放在水平时,它返回0,当我把它放在垂直时,它得到1.并且颠倒,返回-1。此外,如果你在aprox 60degrees中倾斜它,它会返回1/2。

据我所知,当使用带有Firefox的Macbook笔记本电脑时,数据x,y和z将作为余弦。

答案 3 :(得分:0)

Mozilla Firefox现在完全支持W3C DeviceOrientation Events API。您不应再在您的网络应用程序中使用MozOrientation