Мета роботи: Навчитися обробляти дані акселерометра для використання їх в ігрових додатках
12.1. Отримання даних акселерометра
Розглянемо роботу з акселерометром на прикладі, який отримує дані з пристрою та інформує вас про них на екран.
Створимо новий стандартний ігровий проект, підготуємо його для виведення тексту в ігрове вікно XNA, додамо новий ресурс .spritefont з ім'ям MyFont. Для доступу до акселерометру нам знадобиться, по-перше, підключити бібліотеку Microsoft.Devices.Sensors. по-друге - простір імен Microsoft.Devices.Sensor.
Для підключення бібліотеки потрібно зробити клацання правою кнопкою миші в Обозревателе рішень по групі Посилання в проекті P6_1, вибрати команду Додати посилання і у вікні, на закладці. NET вибрати Microsoft.Devices.Sensor. Мал. 12.1.
Мал. 12.1. підключення бібліотеки
В результаті вікно Оглядач рішень має прийняти вигляд, показаний на рис. 12.2
Мал. 12.2. Вікно Оглядач рішень
Ми реалізували процедуру отримання даних з акселерометра в коді основної програми. Ви можете бачити цей код в лістингу 12.1
Лістинг 12.1. Код класу Game1
Розглянемо ключові моменти цього коду. Тут ми збираємося вивести значення показань акселерометра на екран. Ці свідчення будуть зберігатися у змінній accVector типу Vector3. Отримання даних акселерометра і ігровий цикл працюють в різних потоках, для того, щоб забезпечити правильність роботи програми, тобто - виключити зчитування в методі Update даних з змінної accVector. які належать різним результатам вимірювань показань акселерометра. ми блокуємо, використовуючи конструкцію lock. критично важливі операції. в нашому випадку це - установка змінної accVector в обробнику події accelerometer_CurrentValueChanged і в методі Update.
У методі Initialize ми створюємо новий об'єкт типу Accelerometer. встановлюємо його параметр TimeBetweenUpdates. рівний 1000 мілісекунд, тобто показники акселерометра будуть зніматися 1 раз в секунду. Цей час може бути і іншим - все залежить від завдань, які стоять перед додатком.
Для отримання даних з акселерометра ми підключаємо оброблювач події CurrentValueChanged. яке відбувається при надходженні нових даних з пристрою. Цей оброблювач реалізований процедурою accelerometer_CurrentValueChanged. тут ми отримуємо дані (вони представлені у вигляді тривимірного вектора) і записуємо їх в змінну accVector.
Перш ніж використовувати акселерометр. потрібно виконати метод Start () об'єкта Accelerometer. Спроба виконати цей метод пов'язана з роботою з фізичним пристроєм, тут можливі помилки, тому ми укладаємо цю спробу в конструкцію try <> catch <>. Тут можна налаштувати поведінку програми в тому випадку, якщо дана спроба не вдасться, то є, акселерометр виявиться не ініціалізувати.
У методі Update ми наводимо вміст змінної accVector на текстове подання і записуємо отриманий рядок в змінну text. текст, що міститься в якій, виводимо на екран в методі Draw.
Мал. 12.3. Показання акселерометра, пристрій лежить на горизонтальній поверхні
Програми, що використовують фізичні сенсори. безумовно, потрібно налагоджувати з використанням реального пристрою, однак, у випадку з акселерометром, велику допомогу в налагодженні можуть надати додаткові інструменти, доступні в емуляторі.