Tôi đang tạo trò chơi đầu tiên cho Windows Phone (XNA). Tôi sử dụng gia tốc kế để thay đổi vị trí của một crosshair trên màn hình:Sự kiện tăng tốc Windows Phone 8
Dưới đây là mã trong Initialize của tôi() chức năng (lưu ý rằng gia tốc là biến cục bộ chỉ khai báo trong hàm này):
Accelerometer accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
Và xử lý sự kiện:
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);
}
}
này hoạt động tốt trên Trình giả lập Windows Phone và trên Nokia Lumia 520 được kết nối với máy tính và khởi chạy từ Visual Studio, tuy nhiên khi tôi khởi chạy trò chơi trong điện thoại (không kết nối với máy tính), sự kiện accelerometer_CurrentValueChanged dường như chỉ được gọi một lần, trên ứng dụng khởi động.
Giải pháp của tôi là làm cho gia tốc một thành viên của lớp game của tôi, sau đó mã trong Initialize() như thế này:
accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
Vì vậy, câu hỏi của tôi là, tại sao việc giải pháp này? Và tại sao có sự khác biệt giữa ứng dụng được khởi chạy từ VS và thông thường, ngay cả trên cùng một thiết bị?
Tôi hoàn toàn hài lòng với câu trả lời này. Cảm ơn – Przemen