Jak naprogramovat plynulý pohyb pomocí akcelerometru jako labyrint hry na iPhone OS?

hlasů
4

Chci, aby bylo možné učinit obrázek pohyb realisticky s akcelerometr to controlling, jako každý labyrintovou hru. Níže ukazuje, co mám tak daleko, ale zdá se být velmi nervózní a přece není realistický vůbec. Míč obrazy se zdá nikdy nebude schopen zastavit a dělá spoustu natočené pohyby všude kolem.

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

deviceTilt.x = 0.01 * deviceTilt.x + (1.0 - 0.01) * acceleration.x;
deviceTilt.y = 0.01 * deviceTilt.y + (1.0 - 0.01) * acceleration.y;
}

-(void)onTimer {

    ballImage.center = CGPointMake(ballImage.center.x + (deviceTilt.x * 50), ballImage.center.y + (deviceTilt.y  * 50));

    if (ballImage.center.x > 279) {

        ballImage.center = CGPointMake(279, ballImage.center.y);
    }
    if (ballImage.center.x < 42) {

        ballImage.center = CGPointMake(42, ballImage.center.y);
    }
    if (ballImage.center.y > 419) {

        ballImage.center = CGPointMake(ballImage.center.x, 419);
    }
    if (ballImage.center.y < 181) {

        ballImage.center = CGPointMake(ballImage.center.x, 181);
    }
Položena 16/02/2010 v 13:56
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
3

Existuje nějaký důvod, proč nelze použít vyhlazovací filtr poskytnuté v odpovědi na předchozí otázku: Jak používat klouzavý průměr odfiltrovat hodnot akcelerometru v iPhone OS ?

Odpovězeno 16/02/2010 v 14:11
zdroj uživatelem

hlasů
2

Je potřeba vypočítat klouzavý průměr hodnot. K tomu budete potřebovat k ukládání poslední nhodnoty v poli, a pak tlačit a pop hodnoty z pole, když někdy budete číst data z akcelerometru. Zde je několik pseudocode:

const SIZE = 10;
float[] xVals = new float[SIZE];

float xAvg = 0;

function runAverage(float newX){
  xAvg += newX/SIZE;
  xVals.push(newX);
  if(xVals.length > SIZE){
    xAvg -= xVals.pop()/SIZE;
  }
}

Musíte to udělat pro všechny tři osy. Pohrajte si s hodnotou velikosti; čím větší je, tím hladší je tato hodnota, ale pomalejší věci se zdají reagovat. To opravdu záleží na tom, jak často čtete hodnotu akcelerometru. Je-li číst 10 krát za sekundu, pak SIZE = 10by mohla být příliš velká.

Odpovězeno 16/02/2010 v 14:04
zdroj uživatelem

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