【发布时间】:2013-07-11 14:48:59
【问题描述】:
我正在为 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 启动的应用程序与正常启动的应用程序之间存在差异,即使在同一设备上也是如此?
【问题讨论】:
标签: c# xna windows-phone-8