Menggunakan inklinometer
Pelajari cara menggunakan inklinometer untuk menentukan pitch, roll, dan yaw.
API penting
Prasyarat
Anda harus terbiasa dengan Extensible Application Markup Language (XAML), Microsoft Visual C#, dan peristiwa.
Perangkat atau emulator yang Anda gunakan harus mendukung inklinometer.
Membuat aplikasi inklinometer sederhana
Beberapa game 3-D memerlukan inklinometer sebagai perangkat input. Salah satu contoh umumnya adalah simulator penerbangan, yang memetakan tiga sumbu inklinometer (X, Y, dan Z) ke lift, aileron, dan input kemudi pesawat.
Catatan
Untuk implementasi yang lebih lengkap, lihat sampel inklinometer.
Petunjuk
Buat proyek baru, pilih Aplikasi Kosong (Universal Windows) dari templat proyek Visual C# .
Buka file MainPage.xaml.cs proyek Anda dan ganti kode yang ada dengan yang berikut ini.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Core;
using Windows.Devices.Sensors;
namespace App1
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
private Inclinometer _inclinometer;
// This event handler writes the current inclinometer reading to
// the three text blocks on the app' s main page.
private async void ReadingChanged(object sender, InclinometerReadingChangedEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
InclinometerReading reading = e.Reading;
txtPitch.Text = String.Format("{0,5:0.00}", reading.PitchDegrees);
txtRoll.Text = String.Format("{0,5:0.00}", reading.RollDegrees);
txtYaw.Text = String.Format("{0,5:0.00}", reading.YawDegrees);
});
}
public MainPage()
{
this.InitializeComponent();
_inclinometer = Inclinometer.GetDefault();
if (_inclinometer != null)
{
// Establish the report interval for all scenarios
uint minReportInterval = _inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_inclinometer.ReportInterval = reportInterval;
// Establish the event handler
_inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer, InclinometerReadingChangedEventArgs>(ReadingChanged);
}
}
}
}
Anda harus mengganti nama namespace layanan di cuplikan sebelumnya dengan nama yang Anda berikan pada proyek Anda. Misalnya, jika Anda membuat proyek bernama InclinometerCS, Anda akan mengganti namespace App1
dengan namespace InclinometerCS
.
- Buka file MainPage.xaml dan ganti konten asli dengan XML berikut.
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
<TextBlock HorizontalAlignment="Left" Height="21" Margin="0,8,0,0" TextWrapping="Wrap" Text="Pitch: " VerticalAlignment="Top" Width="45" Foreground="#FFF9F4F4"/>
<TextBlock x:Name="txtPitch" HorizontalAlignment="Left" Height="21" Margin="59,8,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="71" Foreground="#FFFDF9F9"/>
<TextBlock HorizontalAlignment="Left" Height="23" Margin="0,29,0,0" TextWrapping="Wrap" Text="Roll:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F1F1"/>
<TextBlock x:Name="txtRoll" HorizontalAlignment="Left" Height="23" Margin="59,29,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="50" Foreground="#FFFCF9F9"/>
<TextBlock HorizontalAlignment="Left" Height="19" Margin="0,56,0,0" TextWrapping="Wrap" Text="Yaw:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F3F3"/>
<TextBlock x:Name="txtYaw" HorizontalAlignment="Left" Height="19" Margin="55,56,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="54" Foreground="#FFF6F2F2"/>
</Grid>
</Page>
Anda harus mengganti bagian pertama dari nama kelas di cuplikan sebelumnya dengan namespace aplikasi Anda. Misalnya, jika Anda membuat proyek bernama InclinometerCS, Anda akan mengganti x:Class="App1.MainPage"
dengan x:Class="InclinometerCS.MainPage"
. Anda juga harus mengganti xmlns:local="using:App1"
dengan xmlns:local="using:InclinometerCS"
.
- Tekan F5 atau pilih Debug>Mulai Debugging untuk membangun, menyebarkan, dan menjalankan aplikasi.
Setelah aplikasi berjalan, Anda dapat mengubah nilai inklinometer dengan memindahkan perangkat atau menggunakan alat emulator.
- Hentikan aplikasi dengan kembali ke Visual Studio dan tekan Shift+F5 atau pilih Debug>Hentikan Penelusuran Kesalahan untuk menghentikan aplikasi.
Penjelasan
Contoh sebelumnya menunjukkan bagaimana kode kecil yang perlu Anda tulis untuk mengintegrasikan input inklinometer di aplikasi Anda.
Aplikasi ini membuat koneksi dengan inklinometer default dalam metode MainPage .
_inclinometer = Inclinometer.GetDefault();
Aplikasi menetapkan interval laporan dalam metode MainPage . Kode ini mengambil interval minimum yang didukung oleh perangkat dan membandingkannya dengan interval yang diminta sebesar 16 milidetik (yang perkiraan laju refresh 60 Hz). Jika interval minimum yang didukung lebih besar dari interval yang diminta, kode akan mengatur nilai ke minimum. Jika tidak, nilainya diatur ke interval yang diminta.
uint minReportInterval = _inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_inclinometer.ReportInterval = reportInterval;
Data inklinometer baru diambil dalam metode ReadingChanged . Setiap kali driver sensor menerima data baru dari sensor, driver tersebut meneruskan nilai ke aplikasi Anda menggunakan penanganan aktivitas ini. Aplikasi ini mendaftarkan penanganan aktivitas ini pada baris berikut.
_inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer,
InclinometerReadingChangedEventArgs>(ReadingChanged);
Nilai baru ini ditulis ke TextBlocks yang ditemukan di XAML proyek.
<TextBlock HorizontalAlignment="Left" Height="21" Margin="0,8,0,0" TextWrapping="Wrap" Text="Pitch: " VerticalAlignment="Top" Width="45" Foreground="#FFF9F4F4"/>
<TextBlock x:Name="txtPitch" HorizontalAlignment="Left" Height="21" Margin="59,8,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="71" Foreground="#FFFDF9F9"/>
<TextBlock HorizontalAlignment="Left" Height="23" Margin="0,29,0,0" TextWrapping="Wrap" Text="Roll:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F1F1"/>
<TextBlock x:Name="txtRoll" HorizontalAlignment="Left" Height="23" Margin="59,29,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="50" Foreground="#FFFCF9F9"/>
<TextBlock HorizontalAlignment="Left" Height="19" Margin="0,56,0,0" TextWrapping="Wrap" Text="Yaw:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F3F3"/>
<TextBlock x:Name="txtYaw" HorizontalAlignment="Left" Height="19" Margin="55,56,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="54" Foreground="#FFF6F2F2"/>