Gunakan inclinometer

API Penting

Sampel

Pelajari cara menggunakan inclinometer untuk menentukan pitch, roll, dan yaw.

Beberapa game 3-D memerlukan inclinometer sebagai perangkat input. Salah satu contoh umum adalah simulator penerbangan, yang memetakan tiga sumbu inclinometer (X, Y, dan Z) ke lift, aileron, dan input kemudi pesawat.

Prasyarat

Anda harus terbiasa dengan Extensible Application Markup Language (XAML), Microsoft Visual C#, dan acara.

Perangkat atau emulator yang Anda gunakan harus mendukung inclinometer.

Buat aplikasi inclinometer sederhana

Bagian ini dibagi menjadi dua subbagian. Subbagian pertama akan membawa Anda melalui langkah-langkah yang diperlukan untuk membuat aplikasi inclinometer sederhana dari awal. Subbagian berikut menjelaskan aplikasi yang baru saja Anda buat.

Instruksi

  • 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.

    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 ruang nama di cuplikan sebelumnya dengan nama yang Anda berikan kepada proyek Anda. Misalnya, jika Anda membuat proyek bernama InclinometerCS, Anda akan menggantinya 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 ruang nama aplikasi Anda. Misalnya, jika Anda membuat proyek bernama InclinometerCS, Anda akan menggantinya 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 DebugStart>Debugging untuk membangun, menyebarkan, dan menjalankan aplikasi.

Setelah aplikasi berjalan, Anda dapat mengubah nilai inclinometer dengan memindahkan perangkat atau menggunakan alat emulator.

  • Hentikan aplikasi dengan kembali ke Visual Studio dan tekan Shift +F5 atau pilih DebugStop>Debugging untuk menghentikan aplikasi.

Penjelasan

Contoh sebelumnya menunjukkan betapa sedikit kode yang perlu Anda tulis untuk mengintegrasikan input inclinometer di aplikasi Anda.

Aplikasi ini membuat koneksi dengan inclinometer 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 16 milidetik (yang mendekati refresh rate 60-Hz). Jika interval minimum yang didukung lebih besar dari interval yang diminta, kode menetapkan nilai ke minimum. Jika tidak, itu mengatur nilai ke interval yang diminta.

uint minReportInterval = _inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_inclinometer.ReportInterval = reportInterval;

Data inclinometer baru ditangkap dalam metode ReadingChanged . Setiap kali driver sensor menerima data baru dari sensor, ia meneruskan nilai ke aplikasi Anda menggunakan penangan peristiwa ini. Aplikasi ini mendaftarkan penangan peristiwa ini pada baris berikut.

_inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer,
InclinometerReadingChangedEventArgs>(ReadingChanged);

Nilai-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"/>