对于android来说,访问方向滚动数据是不可靠的

对于android来说,访问方向滚动数据是不可靠的,android,orientation,pitch,Android,Orientation,Pitch,因此,我正在为android创建一个游戏,它使用设备的滚动来设置主要角色的位置。每次运行.onSensorChangedevent方法时都会更新该位置。问题是,即使我运行我的应用程序并将手机放在桌面上,数值也会发生大约两度的显著变化。收集到的数据的灵敏度似乎也不是很精确,因为角度的差异似乎每次变化都以0.4度的增量递增。使用 Log.e(TAG, "roll: " + event.values[2]); 顺序度输出如下所示: roll: 2.265 roll: 2.265 roll: 2.2

因此,我正在为android创建一个游戏,它使用设备的滚动来设置主要角色的位置。每次运行.onSensorChangedevent方法时都会更新该位置。问题是,即使我运行我的应用程序并将手机放在桌面上,数值也会发生大约两度的显著变化。收集到的数据的灵敏度似乎也不是很精确,因为角度的差异似乎每次变化都以0.4度的增量递增。使用

Log.e(TAG, "roll: " + event.values[2]); 
顺序度输出如下所示:

roll: 2.265
roll: 2.265
roll: 2.265
roll: 1.843
roll: 2.265
roll: 2.265
roll: 2.75
roll: 2.265
我还实现了这个算法来限制我的角色在屏幕上的移动,但这还不够,而且严重限制了角色移动的速度和对当前滚动数据的响应。我希望角色在滚动方面的位置尽可能接近1-1

public void onSensorChanged(SensorEvent event)
{
    if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)
    {
    float newX = -(int)event.values[2] * CCDirector.sharedDirector().displaySize().width/10.0f + 
          CCDirector.sharedDirector().displaySize().width/2.0f;

            sam.updatePosition(newX);

    Log.e(TAG, "roll: " + event.values[2]);
     }
}

public void updatePosition(float newX)
{
    float winSizeX = CCDirector.sharedDirector().displaySize().width;
    float contentWidth = this.sprite.getContentSize().width;

    //tries to eliminate jumpy behaviour by the character by limiting his speed
    double tolerance = 0.01;
    if (Math.abs(newX - this.sprite.getPosition().x) > winSizeX * tolerance) 
        newX = this.sprite.getPosition().x - ((this.sprite.getPosition().x - newX) * 0.1f);

    this.sprite.setPosition(newX, this.sprite.getPosition().y);
}
我想知道这是正常的还是我正在索尼Xperia Play上测试的手机

谢谢你的意见

如何在运行中平滑数据

它会有一点滞后,但不会引起注意


另一方面,我不会使用诸如roll之类的工具。

只是将其编辑到问题中。我已经将这个位置移动限制算法纳入了问题中,但有太多的滞后。我没有遇到来自您链接的问题。我不希望任何人在极端的方向上玩游戏,因此不会有不稳定的角度行为问题。