2010-01-21 24 views
6

Come calibrare correttamente l'accelerometro per il mio gioco iPhone? Attualmente, quando il telefono è su una superficie piana, la paletta si sposta verso sinistra. I filtri passa alto o basso non sono una soluzione accettabile in quanto ho bisogno di un controllo completo sulla paletta anche a bassi valori & alti. So che Apple ha il campione BubbleLevel ma trovo difficile seguire ... qualcuno potrebbe semplificare il processo?Calibrazione dell'accelerometro iPhone

Il mio codice accelerometro simile a questo:

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

Grazie!

risposta

9

Ok, il problema è SOLVED e la soluzione è così semplice che sono davvero imbarazzato che non l'ho inventato prima. E 'semplice come questo:

In un "pulsante di calibrazione":

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

Nella funzione di tempo accelerometro gioco:

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

E' semplice come aggiungere l'offset. * nasconde la testa *

+0

Ecco una spiegazione completa del soggetto http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials /39833-tutorial-accelerometro-calibrazione-optimizzazioni.html –

+2

Sì, ho scritto quel post;) – user2393462435

+0

Questo è un thread vecchio, ma sono curioso di sapere che tipo di oggetti currentAccelX è e cos'è accelerationFactor. Potete aiutarmi con questo? –

0

Questo è il codice che ho finora:

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