калибровка акселерометра iPhone
Как правильно откалибровать акселерометр для игры на iPhone? В настоящее время, когда телефон находится на плоской поверхности, весло дрейфует влево. Фильтры высоких или низких частот не являются приемлемым решением, поскольку мне нужен полный контроль над веслом даже при низких и высоких значениях. Я знаю, что у Apple есть образец BubbleLevel, но мне трудно следовать... может ли кто-нибудь упростить процесс?
мой код акселерометра выглядит так:
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
float acelx = -acceleration.y;
float x = acelx*40;
Board *board = [Board sharedBoard];
AtlasSprite *paddle = (AtlasSprite *)[board.spriteManager getChildByTag:10];
if ( paddle.position.x > 0 && paddle.position.x < 480) {
paddle.position = ccp(paddle.position.x+x, paddle.position.y);
}
if ( paddle.position.x < 55 ) {
paddle.position = ccp(56, paddle.position.y);
}
if ( paddle.position.x > 435 ) {
paddle.position = ccp(434, paddle.position.y);
}
if ( paddle.position.x < 55 && x > 1 ) {
paddle.position = ccp(paddle.position.x+x, paddle.position.y);
}
if ( paddle.position.x > 435 && x < 0) {
paddle.position = ccp(paddle.position.x+x, paddle.position.y);
}
}
спасибо!
2 ответов
хорошо, Проблема решена, и решение настолько простое, что я на самом деле смущен, что не придумал его раньше. Это так просто:
кнопка "калибровка":
//store the current offset for a "neutral" position
calibration = -currentAccelX * accelerationFactor;
в игре функция акселерометра времени:
//add the offset to the accel value
float x = (-acceleration.y * accelerationFactor) + calibration;
это так же просто, как добавление смещения. * прячет голову *
Это код, который у меня есть до сих пор:
//calibrate code from StackOverflow
float calibration = -acceleration.x * accelerationFraction;
float x = (-acceleration.y * accelerationFraction) + calibration;
//My original code
accelerationFraction = acceleration.y*2;
if (accelerationFraction < -1) {
accelerationFraction = -1;
} else if (accelerationFraction > 1) {
accelerationFraction = 1;
}
//API CHANGE set delegate to self
if (orientation == UIDeviceOrientationLandscapeLeft){
accelerationFraction *= -1;
}