Калибровка акселерометра iPhone - PullRequest
6 голосов
/ 22 января 2010

Как правильно откалибровать акселерометр для моей игры на 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 ]

9 голосов
/ 23 января 2010

Хорошо, проблема решена, и решение настолько простое, что я на самом деле смущен, я не придумал его раньше Это так просто:

В «кнопке калибровки»:

//store the current offset for a "neutral" position
calibration = -currentAccelX * accelerationFactor;

В игровом времени функция акселерометра:

//add the offset to the accel value
float x = (-acceleration.y * accelerationFactor) + calibration;

Это так же просто, как добавить смещение. * прячет голову *

0 голосов
/ 30 августа 2012

Это код, который у меня есть:

//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;
}
...