Tworzę swoją pierwszą grę dla Windows Phone (XNA). Używam akcelerometr, aby zmienić położenie celownika na ekranie:Zdarzenia z akcelerometru Windows Phone 8
Oto kod w moim initialize() funkcji (zauważ, że Akcelerometr jest lokalna zmienna zadeklarowana tylko w tej funkcji):
Accelerometer accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
I obsługi zdarzeń:
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);
}
}
To działa prawidłowo na emulatorze Windows Phone i na mojej Nokia Lumia 520 podłączonej do komputera i uruchamianej z Visual Studio, jednak gdy uruchomię grę w telefonie (nie jest połączona z komputerem), zdarzenie accelerometer_CurrentValueChanged wydaje się być wywoływane tylko raz, w aplikacji uruchomienie.
Moje rozwiązanie było uczynienie akcelerometru członkiem mojej klasy gier, a następnie kod w Initialize() tak:
accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
Więc moje pytanie brzmi, dlaczego to działa rozwiązanie? I dlaczego jest różnica między aplikacją uruchamianą z VS a normalnie, nawet na tym samym urządzeniu?
Jestem w pełni zadowolony z tej odpowiedzi. Dzięki – Przemen