Итак, я сделал базовую калибровку в своей игре следующим образом: Откалибруйте код:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"X-Calibrate"];
}
Затем в моем игровом представлении это некоторые определения для акселерометра:
#define kFilteringFactor 0.13
#define MAXXACCELERATION 24
В методе init моего игрового класса я делаю следующее:
calibrationFloat = [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"];
Затем я делаю это:
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
//Low Pass Filter (gets rid of little jitters) + Calibration value combined
rollingX = ((acceleration.x - calibrationFloat) * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
}
калибровкеFloat присваивается значение, считанное из NSUserDefaults перед запуском игры.
Затем в игровом цикле я делаю это:
int rollingAmount = (IS_IPAD() ? 52 : 44);
CGFloat xFloat = (rollingX * rollingAmount);
pos.x += xFloat < -MAXXACCELERATION ? -MAXXACCELERATION : (xFloat > MAXXACCELERATION ? MAXXACCELERATION : xFloat);
Затем я устанавливаю положение своего изображения на основе pos.x. Однако это проблема: После калибровки чувствительность движения моего изображения очень высока, что делает его очень быстрым движением. Прежде чем я откалибрую, движение идет в хорошем темпе, поэтому что-то с калибровкой должно идти не так.
Что-то здесь не так, я что-то не так делаю с расчетами?
Спасибо!
calibrationValue
нигде в вашем коде. - person Victor Zamanian   schedule 02.12.2012calibrationFloat
или это две разные переменные? (Кроме того, я видел, что вы задали связанный с этим вопрос, где в ответе говорилось, что вы неправильно вычислялиrollingX
. Вы полностью это исключили?) - person Victor Zamanian   schedule 02.12.2012rollingX
в первый раз? - person Victor Zamanian   schedule 02.12.2012rollingX
неинициализирован и заставлял вас получать большие значения дляxFloat
. Но еслиrollingX
инициализируется0
перед вычислениями, то это не должно быть проблемой. Единственное, что я сразу вижу, это то, чтоacceleration.x
на самом деле являетсяdouble
, но это тоже не должно иметь большого значения. Так что, боюсь, у меня закончились идеи. Прости. :-\ - person Victor Zamanian   schedule 02.12.2012