Kalibrace iPhone Akcelerometr

hlasů
6

Jak mám správně kalibrovat akcelerometr pro svůj iPhone hry? V současné době, kdy je telefon na rovném povrchu, pádlo závěje doleva. Vysoké nebo low-pass filtry nejsou přijatelným řešením, protože musím úplnou kontrolu nad pádlem i při nízkých a vysokých hodnotách. Vím, že Apple má vzorek BubbleLevel ale považuji za obtížné sledovat ... mohl někdo zjednodušit proces?

Můj akcelerometr kód vypadá takto:

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

Děkuji!

Položena 21/01/2010 v 23:34
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
9

V pořádku, problém je vyřešen a řešení je tak jednoduché, že jsem skutečně v rozpacích jsem nepřišel s ním dřív. Je to tak jednoduché, jak to:

V „kalibrace tlačítko“:

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

Ve funkci herní čas akcelerometru:

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

Je to tak jednoduché, jak přidat posun. * Schovává hlavu *

Odpovězeno 23/01/2010 v 00:53
zdroj uživatelem

hlasů
0

To je kód, který jsem doposud:

//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;
}
Odpovězeno 30/08/2012 v 15:49
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more