2010-01-21 13 views
6

¿Cómo calibro correctamente el acelerómetro para mi iPhone? Actualmente, cuando el teléfono está sobre una superficie plana, la paleta se desplaza hacia la izquierda. Los filtros de paso alto o bajo no son una solución aceptable ya que necesito un control completo sobre la paleta incluso a valores bajos de &. Sé que Apple tiene la muestra BubbleLevel, pero me resulta difícil de seguir ... ¿alguien podría simplificar el proceso?Calibración del acelerómetro iPhone

Mi código acelerómetro se ve así:

-(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); 
} 
} 

Gracias!

Respuesta

9

Bien, el problema RESUELVE y la solución es tan simple que estoy avergonzado de no haberlo hecho antes. Es tan simple como esto:

En un "botón de calibración":

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

En la función de tiempo acelerómetro juego:

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

Es tan simple como la suma del desplazamiento. * esconde la cabeza *

+0

He aquí una explicación completa del sujeto http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials /39833-tutorial-accelerometer-calibration-optimizations.html –

+2

Sí, escribí esa publicación;) – user2393462435

+0

Este es un hilo antiguo, pero tengo curiosidad por saber qué tipo de objetos es currentAccelX y qué accelerationFactor. ¿Puedes ayudar con esto? –

0

Este es el código que tengo hasta ahora:

//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; 
} 
Cuestiones relacionadas