Как откалибровать UIAccelerometer? - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь откалибровать мой UIAccelerometer из ViewA, но мой игровой вид - ViewB. Итак, в значительной степени я хочу сказать, что пользователь играет на своей стороне, я хочу, чтобы моя игра действовала так, как если бы он играл, сидя в нормальном положении.

Значит, в ViewA я бы сделал что-то подобное?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);
[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"value1"];

Тогда в моем классе Game я сделал бы это с помощью метода делегата UIAccelerometer?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"]);
//Low Pass Filter
rollingX = (accelX * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
    AccelPoint.x += (rollingX*50);

Тогда я бы сделал что-то вроде:

mySprite.position = ccp(accelX, yValue);

Я что-то не так делаю?

Спасибо!

Редактировать : Новый код для ViewB, мне все еще понадобится какая-то форма трения сейчас?

    rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));     

AccelPoint.x += (rollingX*50);

Затем, после этого кода, я определяю положение моего объекта.

1 Ответ

1 голос
/ 01 декабря 2011

Пример в этом вопросе, кажется, калибруется аналогично тому, что вы описали: Акселерометр и калибровка - iPhone SDK

Ваш пример кода для представления A:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);

[[NSUserDefaults standardUserDefaults] setFloat: accelX forKey: @ "value1"];

Это будет сохранять предварительно откалиброванное значение.Таким образом, эффект калибровки будет сведен к минимуму, если вы когда-либо калибровали раньше.

Я думаю, просто:

[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"value1"];

Может быть, больше того, что вы ищете.Таким образом, вы уберете весь эффект гравитации в начальной позиции пользователя.

Ваш код для View B выглядит хорошо, хотя имейте в виду, что это позволит бесконечно увеличивать скорость вашего персонажа.Рассмотрите возможность добавления некоторой формы трения.

...