仅针对特定应用校准G-Sensor

时间:2014-08-08 12:45:44

标签: android android-sensors

我想问你是否可以通过按下按钮来校准Android设备传感器(G-Sensor和Compass)。我正在开发一种使用磁传感器进行俯仰,滚动和航向的应用程序,用户必须通过触摸按钮来开始在每个应用程序上校准传感器。

如果可以这样做,是否只能为该应用程序保存传感器配置?假设您从我的应用程序校准它,然后您玩游戏。游戏无法使用这些设置。

谢谢!

1 个答案:

答案 0 :(得分:0)

在我的情况下,我有2层 1)GCa librationLayer       用于设置校准点 2)GamePlayLayer       游戏正在玩的地方,我们正在使用传感器的价值

所以当用户按下“校准它”按钮时,你所要做的就是玩游戏层 运行此代码,它将校准g传感器在Y轴上0点以上50%(我们将在GamePlay中看到如何)

void GCalibrateLayer::Calibrate()
{
    UserDefault *userdefault = UserDefault::getInstance();
    double calibrate_X = 0;
    double calibrate_Y = 0.5;
    userdefault->setDoubleForKey("callibrate_x",callibrate_X);
    userdefault->setDoubleForKey("callibrate_y",callibrate_Y);
}
你的游戏玩法中的

首先在init()中获取这些数据并保存变量“_calibrate_X”和“_calibrate_Y”

UserDefault *userdefault = UserDefault::getInstance();
_callibrate_X  = userdefault->getDoubleForKey("callibrate_x");
_callibrate_Y  = userdefault->getDoubleForKey("callibrate_y");

并且在你的加速方法中 将这些变量的值添加到加速度计值并使用新变量(_accelerometer_X,_accelerometer_Y)作为acc-> x和acc-> y。

void GamePlayLayer::OnAcceleration(cocos2d::Acceleration *acc, cocos2d::Event *event)
{
    _accelerometer_X = acc->x +_calibrate_X;
    _accelerometer_Y = acc->y +_calibrate_Y;
}

您也可以使用从加速计获得的自定义值,而不是GCalibrateLayer :: Calibrate()中的0.5和0。

希望你能得到答案。