2010-01-21 12 views
6

Jak poprawnie skalibrować akcelerometr do mojej gry na iPhone'a? Obecnie, gdy telefon znajduje się na płaskiej powierzchni, łopatka przesuwa się w lewo. Filtry górnoprzepustowy lub dolnoprzepustowy nie są rozwiązaniem dopuszczalnym, ponieważ potrzebuję pełnej kontroli nad wiosłem, nawet przy niskich wartościach. Wiem, że Apple ma próbkę BubbleLevel, ale uważam, że trudno ją śledzić ... czy ktoś mógłby uprościć ten proces?Kalibracja przyspieszeniomierza iPhone'a

Mój kod akcelerometr wygląda następująco:

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

Dziękujemy!

Odpowiedz

9

OK, problem ROZWIĄZANIE i rozwiązanie jest tak proste, że jestem zawstydzony, że nie wymyśliłem tego wcześniej. To tak proste, jak to:

w „przycisk kalibracji”:

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

w grze funkcji czasu przyspieszenia:

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

jest to tak proste jak dodanie offsetu. * chowa głowę *

+0

Oto kompleksowe wyjaśnienie tematu http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials /39833-tutorial-accelerometer-calibration-optimizations.html –

+2

Tak, napisałem ten post;) – user2393462435

+0

To jest stary wątek, ale jestem ciekawy jaki rodzaj obiektów jest currentAccelX i jaki jest AccelerationFactor. Czy możesz w tym pomóc? –

0

Jest to kod mam tak daleko:

//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; 
} 
Powiązane problemy