我正在为 Windows Phone (XNA) 制作我的第一款游戏。我使用加速度计来改变屏幕上十字准线的位置:
这是我的Initialize()函数中的代码(请注意,Accelerometer 是仅在此函数中声明的局部变量):
Accelerometer accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
和事件处理程序:
void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
{
lock (accelerometerVectorLock)
{
accelerometerVector = new Vector3(
(float)e.SensorReading.Acceleration.X,
(float)e.SensorReading.Acceleration.Y,
(float)e.SensorReading.Acceleration.Z);
}
}
这在 Windows Phone Emulator 和连接到计算机并从 Visual Studio 启动的诺基亚 Lumia 520 上运行良好,但是当我在手机中启动游戏(未连接到计算机)时,accelerometer_CurrentValueChanged 事件似乎只被调用一次, 在应用程序启动时。
我的解决方案是让加速度计成为我的 Game 类的成员,然后在 Initialize() 中编写如下代码:
accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
所以我的问题是,为什么这个解决方案有效?为什么从 VS 启动的应用程序与正常启动的应用程序之间存在差异,即使在同一设备上也是如此?