Windows Phone Accelerometer Support in XNA
/There is no native XNA support for the accelerometer in Windows Phone. It seems to have been moved into a different sensors class. I hope it doesn’t stay there. The accelerometer support in the Zune HD is fantastically easy to use and well in keeping with the other inputs.
I’ve written a tiny wrapper class that implements the accelerometer using the new sensor interface, but I really think this should really be put back into XNA, as event driven stuff really doesn’t sit well with the XNA philosophy of polling:
public class AccelerometerState
{
public Vector3 Acceleration;
public AccelerometerState()
{
}
}
public class Accelerometer
{
static Accelerometer()
{
AccelerometerSensor.Default.ReadingChanged +=
new EventHandler<AccelerometerReadingAsyncEventArgs>
Default_ReadingChanged);
}
static AccelerometerState state = new AccelerometerState();
static void Default_ReadingChanged(object sender,
AccelerometerReadingAsyncEventArgs e)
{
state.Acceleration.X = (float)e.Value.Value.X;
state.Acceleration.Y = (float)e.Value.Value.Y;
state.Acceleration.Z = (float)e.Value.Value.Z;
}
public static AccelerometerState GetState()
{
return state;
}
}
You need to add the Microsoft.Devices.Sensors library to your References to make this work.
While writing this I tried to use keyboard input to simulate the accelerometer, and I found that there is no XNA keyboard support in the emulator, which is fair enough I suppose (although I’d like it really).
It does really weird things in the debugger though, I got all kinds of strange readings if I tried to find out what keys are pressed at a breakpoint when using the immediate mode window.
Of course, I’ve not been able to try this on a real device (I wish) but if anyone out there does I’d love to know if it works or not.