2016-06-01 4 views
0

Ich mache ein LibGDX-Spiel mit Android Studio, wo ein Alien UFO eingehende Asteroiden vermeiden muss, und das UFO bewegt sich mit Beschleunigungsmesser Daten.So passen Sie Beschleunigungsmesserdaten für Telefone an, die in verschiedenen Positionen gehalten werden.

//Gets and smoothens accelerometer data. Values for x and y are switched because the game is played in landscape mode. 
    currentAccelerometerX = Gdx.input.getAccelerometerY(); 
    currentAccelerometerX = currentAccelerometerX * alpha + lastAccelerometerX * (1 - alpha); 
    currentAccelerometerY = Gdx.input.getAccelerometerX(); 
    currentAccelerometerY = currentAccelerometerY * alpha + lastAccelerometerY * (1 - alpha); 

    //Moves the alien 
    alien.alienX += (currentAccelerometerX * 5); 
    alien.alienY -= (currentAccelerometerY * 5); 

    lastAccelerometerY = currentAccelerometerY; 
    lastAccelerometerX = currentAccelerometerX; 

Dieser Code funktioniert, wenn das Telefon gehalten wird, so dass die Rückseite des Telefons parallel zum Boden ist, aber eine solche Position kann nach einer Weile unbequem zu spielen zu bekommen. Ich habe mich gefragt, wie ich die aktuelle Rotation des Gerätes berücksichtigen und die Bewegung des UFOs entsprechend anpassen könnte.

Das Problem scheint nur mit der Y-Position des Alien zu sein, dh die x Beschleunigungsmesser Daten des Telefons (die Werte sind geschaltet, da das Spiel im Querformat-Modus gespielt wird). Wenn das Telefon in einem Winkel zum Boden gehalten wird, bleibt das UFO in der Nähe des unteren Bildschirmrandes.

Antwort

0

JollyGoodSir, wenn ein neues Spiel startet, machen Sie einen Schnappschuss des aktuellen Zustands des Beschleunigungsmessers und stellen Sie diesen als Ihren Basispunkt ein. Wenn Sie nun den Zustand des Beschleunigungssensors auf Änderungen überprüfen, um zu sehen, wie die Neigung geändert wird, vergleichen Sie es als Delta mit diesem Basiswert. Jetzt wird dein Spiel einfach auf die Position kalibriert, in der du das Gerät zu Beginn des Spiels gehalten hast. Glückliche Tage :-)

+0

Es hat funktioniert! Ich musste lediglich Startwerte für AccelerometerX und AccelerometerY erstellen und die aktuellen Accelerometer-Werte von ihnen subtrahieren. –