# Algorithm for optimal control on space ship using accellerometer input data

someone has a good idea/suggestion on a good algorithm for controlling a space ship in a vertical shooter game using accellerometer data?

I have done a simple algorithm, but works very badly. I save an initial accelleration value (used to calibrate the movement according to the user's initial position) and I do subtract it from the current accelleration so I get a "calibrated" value. The problem is that basing the movement solely on relative accelleration has an effect of loss of sensitivity: certain movements are indipendent from the initial position.

Would anyone be able to share a a better solution? I am wondering if I should use/integrate also inputs from gyroscope hardware.

Here is my sample of code for a Cocos2d iOS game:

``````- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
if (calibrationLayer.visible){
[self evaluateCalibration:acceleration];
initialAccelleration=acceleration;
return;
}

if([self evaluatePause]){
return;
}

ShooterScene * shooterScene = (ShooterScene *) [self parent];
ShipEntity *playerSprite = [shooterScene playerShip];

float accellerationtSensitivity = 0.5f;

UIAccelerationValue xAccelleration = acceleration.x - initialAccelleration.x;
UIAccelerationValue yAccelleration = acceleration.y - initialAccelleration.y;

if(xAccelleration > 0.05 || xAccelleration < -0.05) {
[playerSprite setPosition:CGPointMake(playerSprite.position.x +  xAccelleration * 80, playerSprite.position.y + yAccelleration * 80)];
}
else if(yAccelleration > 0.05 || yAccelleration < -0.05)
{
[playerSprite setPosition:CGPointMake(playerSprite.position.x +  xAccelleration * 80, playerSprite.position.y + yAccelleration * 80)];
}

}
``````
-
I'm not sure what the issue is. You mention a loss in sensitivity, but that should not be caused by calibration. Can you give a concrete example of a problem you've run into with this method? –  Marcks Thomas Jun 13 '13 at 13:09